Compact Framework:Timer.Dispose没有阻塞

时间:2010-11-04 00:31:25

标签: compact-framework timer dispose

UPDATE:Timer是一个System.Threading.Timer。

我们有一个在Timer Tick上更新的UI控件。在处理我们的控件时,我们调用timer.Dispose()。在调用UI控件后,当计时器触发时,我们偶尔会遇到ObjectDisposedOExceptions。

我在msdn docs

中看到了这一点

“调用Dispose()方法重载后可能会发生回调,因为定时器将回调队列排队以供线程池线程执行。您可以使用Dispose(WaitHandle)方法重载等待所有回调完成。”< / p>

但是,Compact Framework无法访问该重载方法。

这种情况的最佳解决方法是什么?有没有办法让我们的Dispose方法阻塞,直到计时器完全处理?其他建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定阻止Dispose是个好主意。有许多事情可能会出错,可能会使事情处于不洁净状态。

我会检查您的计时器回调中的控件是否为null。或者,您可以将计时器回调放在try块中并捕获ObjectDisposedException,但这会消耗更多资源(异常抛出/捕获非常昂贵。)

这应该只发生在线程池中的线程耗尽之前,如果定时器发出几次信号但由于控件为空而没有做任何工作,这听起来没有真正的问题。