在定时器的回调方法中抛出异常

Kor*_*tak 32 c# multithreading exception timer backgroundworker

我无法在任何地方找到这个问题的答案......

System.Threading.Timer的回调方法(或在System.Timers.Timer的事件处理程序中)抛出的异常会发生什么.异常是否传播到创建计时器的线程或异常丢失?

在计时器的回调函数中抛出异常有什么副作用?

什么是向计时器的创建线程发信号通知工作线程(回调方法)中的异常被抛出的正确方法?

谢谢你的时间.

SLa*_*aks 35

异常不会传递回调用线程.如果你想要它,你可以添加一个catch块并找出一种方法来通知调用线程.如果调用线程是WinForms或WPF UI线程,则可以使用SynchronizationContext该类将调用传递给UI线程.否则,您可以使用线程安全队列(或同步锁)并在另一个线程中定期检查它.

System.Timers.Timer将默默地吞下异常并继续计时器(尽管这可能会在未来版本的框架中发生变化); System.Threading.Timer将终止该计划.

  • +1建议使用哪个Timer.我一直在寻找我的`InvalidCastException`导致我的应用程序崩溃而不是捕获异常的原因. (2认同)