UPDATE:Timer是一个System.Threading.Timer。
我们有一个在Timer Tick上更新的UI控件。在处理我们的控件时,我们调用timer.Dispose()。在调用UI控件后,当计时器触发时,我们偶尔会遇到ObjectDisposedOExceptions。
我在msdn docs:
中看到了这一点“调用Dispose()方法重载后可能会发生回调,因为定时器将回调队列排队以供线程池线程执行。您可以使用Dispose(WaitHandle)方法重载等待所有回调完成。”< / p>
但是,Compact Framework无法访问该重载方法。
这种情况的最佳解决方法是什么?有没有办法让我们的Dispose方法阻塞,直到计时器完全处理?其他建议?
谢谢!
答案 0 :(得分:0)
我不确定阻止Dispose是个好主意。有许多事情可能会出错,可能会使事情处于不洁净状态。
我会检查您的计时器回调中的控件是否为null。或者,您可以将计时器回调放在try块中并捕获ObjectDisposedException,但这会消耗更多资源(异常抛出/捕获非常昂贵。)
这应该只发生在线程池中的线程耗尽之前,如果定时器发出几次信号但由于控件为空而没有做任何工作,这听起来没有真正的问题。