繁体   English   中英

如何触发事件?

[英]How to trigger an event?

我有此事件处理程序,我需要在WPF应用程序中以编程方式触发此事件。 问题可能与访问修饰符有关。 知道怎么做吗?

private void Monitor (object sender, EventArgs e)
{
    if (App.monitor.IsPrinterReady() == false)
    {
        App.isPrintAllowed = false;               
    }
    else
    {
        App.isPrintAllowed = true;
    }
}

由于您询问了如何引发该事件 ,因此,方法如下:

YourClassInstance.YourEvent(YourClassInstance, SomeEventArgsInstance);

当然,仅当您在自己的班级中声明了自己的事件时,此方法才有效。 如果没有,那么除非所述类的API允许它以某种方式您将无法做到这一点。

您仍然可以像其他人建议的那样调用绑定到事件的函数,但是我会做不同的事情:

private void MonitoringHandler (object sender, EventArgs e)
{
    Monitor();
}

private void Monitor()
{
    App.isPrintAllowed = App.monitor.IsPrinterReady();               
}

在这里, MonitoringHandler方法是您要绑定到事件的方法(无论它是什么)。 之后,如果您需要以编程方式调用事件触发的相同操作,则只需调用Monitor函数即可,就像调用其他方法一样,不带任何参数:

YourClass.Monitor();

这种设计更清洁,恕我直言。

您应该能够像方法一样调用它:

Monitor (null, null);

就像调用其他函数/方法一样调用它: Monitor(null, null)

标准做法是使用OnMonitor方法,该方法可用于以编程方式触发事件。 然后,这将呼叫该事件的所有订阅者。

还要注意,如果您没有该事件的订阅者,则Monitor将为null,因此您需要首先检查它是否为null,以避免引发异常的风险。

private void OnMonitor()
{
    if (Monitor != null)
    {
        Monitor(this, new EventArgs());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM