精简版框架:Timer.Dispose未被阻止

问题描述:

更新:定时器是一个System.Threading.Timer。精简版框架:Timer.Dispose未被阻止

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

我看到这个在msdn docs

“回调的Dispose()方法重载调用后可能会发生,因为计时器队列回调由线程池中的线程执行可以利用的Dispose(WaitHandle的)方法重载等到所有回调完成。“

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

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

谢谢!

我不确定这是一个好主意,以阻止处置。有许多事情可能会使事情处于不洁的状态。

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

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

+0

我们试着检查控件是否处于回调状态。这并没有帮助 - 我们可以告诉控制权的最佳状态是在我们实际处于回调方法内时处置的。 – Steve 2010-11-04 23:29:41