在DispatcherTimer自己的匿名Tick事件处理程序中停止DispatcherTimer
本文关键字:DispatcherTimer 程序 事件处理 Tick 自己的 | 更新日期: 2023-09-27 18:12:06
这样做安全吗?
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();
}
然而,在这个特定的情况下,你的原始代码的工作方式没有任何问题,因为计时器一旦停止就变得可收集。
是。你的计时器将触发一次
编辑:我将根据评论重新措辞我的答案。在你给出的情况下,是的,使用匿名委托是绝对安全的。
在一些情况下,添加匿名委托而不分离它可能会防止您的类被垃圾收集(例如,将匿名委托附加到单例)。有关何时需要和不需要分离事件处理程序的信息,请参阅此答案。