[英]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.