繁体   English   中英

在自己的匿名Tick事件处理程序中停止DispatcherTimer

[英]Stopping DispatcherTimer in its own anonymous Tick event handler

做这样的事情是安全的:

private void MyFunction()
{
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 1);
    timer.Tick += (object sender, object e) =>
    {
        timer.Stop();
        // Some code here
    };
    timer.Start();
}

Matt提出了一种观点,即你附加匿名方法的方式是没有简单的方法来分离它。 以下是可用于在必要时分离的一般模式。

private void MyFunction()
{
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 1);
    EventHandler eh = null;
    eh = (object sender, object e) =>
    {
        timer.Tick -= eh;
        timer.Stop();
        // Some code here
    };

    timer.Tick += eh;
    timer.Start();
}

但是在这种特定情况下,原始代码的工作方式没有任何问题,因为定时器一旦停止就会变为可收集状态。

是。 你的计时器将触发一次。

编辑:我会根据评论重新解释我的答案。 在你给出的情况下,是的,使用匿名代表是完全安全的。

某些情况下,添加匿名委托而不分离它可能会阻止您的类被垃圾收集(例如,将匿名委托附加到单例)。 有关何时分离事件处理程序的信息,请参阅此答案

暂无
暂无

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

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