在调度程序计时器时钟周期事件的事件处理程序之间切换

本文关键字:程序 之间 事件处理 调度程序 计时器 时钟周期 事件 | 更新日期: 2023-09-27 18:36:39

在我的应用程序中,我有调度器计时器和一些我在调度器计时器上使用的事件处理程序。

dt.Tick += myEventHandler1

当我想切换即时报价的事件处理程序时,我像这样使用 sth:

dt.Tick -= myEventHandler1
dt.Tick += myEventHandler2

这是正确的方法吗?

我应该检查一下是否dt。在此之前,刻度不为空?

还有从 dt 中删除所有事件处理程序的最佳方法是什么。滴答事件 ?

我使用 .net 3.5

非常感谢您的帮助

在调度程序计时器时钟周期事件的事件处理程序之间切换

在添加或删除事件处理程序之前,无需检查 nullity,但确实需要在引发事件之前检查 nullity。

为了删除所有事件处理程序,

您必须手动删除事件处理程序,或者编写一个函数以使用反射自动执行此操作。

private void RemoveHandlers(DispatcherTimer dispatchTimer)
{
    var eventField = dispatchTimer.GetType().GetField("Tick",
            BindingFlags.NonPublic | BindingFlags.Instance);
    var eventDelegate = (Delegate) eventField.GetValue(dispatchTimer);
    var invocatationList = eventDelegate.GetInvocationList();
    foreach (var handler in invocatationList)
        dispatchTimer.Tick -= ((EventHandler) handler);
}

在委托的上下文中,您可以简单地分配null以便从链中删除所有处理程序,但是事件本身会阻止这种情况。