C#延迟操作没有内存泄漏

时间:2013-09-20 12:13:06

标签: c# memory-leaks timer garbage-collection delay

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

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

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

我想我首先需要删除一个事件,但为了做到这一点,我必须将lambda提取到  一个单独的方法。是否有更好的方法来简单地延迟操作?

2 个答案:

答案 0 :(得分:0)

问题是你试图延迟的“操作”。如果它是当前的线程而不是SonerGönül的解决方案是要走的路。它还表示应用程序重新安排到另一个线程。

答案 1 :(得分:-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();
};