做这样的事情是否安全:
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();
}
答案 0 :(得分:5)
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();
}
然而,在这种特定情况下,原始代码的工作方式没有任何问题,因为定时器一旦停止就会变为可收集状态。
答案 1 :(得分:4)
是。你的计时器会触发一次。
答案 2 :(得分:2)
编辑:我会根据评论重新解释我的回答。在您已经给出的情况下,是的,使用匿名代表是完全安全的。
有一些情况,其中添加匿名委托而不分离它可能会阻止您的类被垃圾收集(例如,将匿名委托附加到单例)。有关何时分离事件处理程序的信息,请参阅this answer。