0

将操作延迟几秒钟的最佳方法是什么?我在stackoverflow上找到了以下代码:

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) };
timer.Start();
timer.Tick += (_sender, _args) =>
{
     timer.Stop();
     operation();
};

但我认为垃圾收集器不够聪明,无法从内存中删除该计时器,因为它不知道这Tick取决于Start/Stop操作,并且该计时器将不再打开。

我想我需要先删除一个事件,但要做到这一点,我必须将 lambda 提取到一个单独的方法中。有没有更好的方法来简单地延迟手术?

4

2 回答 2

0

问题是您试图延迟什么“操作”。如果它是当前线程,那么 Soner Gönül 的解决方案就是要走的路。它还向应用程序发出信号以重新调度到另一个线程。

于 2013-09-20T12:25:16.797 回答
-1

为什么不处置计时器,然后设置为空?

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) };
timer.Start();
timer.Tick += (_sender, _args) =>
{
     timer.Stop();
     //timer.Dispose(); <-- Not available on a dispatch timer
     timer = null;
     operation();
};
于 2013-09-20T12:16:23.863 回答