6

这样做是否安全:

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();
}
4

3 回答 3

6

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();
}

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

于 2011-10-22T16:25:25.870 回答
4

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

于 2011-10-21T23:12:11.740 回答
2

编辑:我会根据评论改写我的答案。在您给出的情况下,是的,使用匿名代表是完全安全的。

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

于 2011-10-22T14:50:55.217 回答