我有这段代码,我正在使用一个计时器来调用我的RunTest()函数。如果我不使用计时器,则会捕获RunTest()中的所有未处理的异常,但是使用此计时器代码它们不会被捕获。我犯了什么错误?
TextBlock
答案 0 :(得分:2)
记录在案:
Timer组件捕获并抑制所引发的所有异常 Elapsed事件的事件处理程序。
你需要在OnTimedEvent
方法中捕获,然后将该异常传播回去,例如,如果你希望CurrentDomain_UnhandledException
将其捕获到throw
ThreadPool.QueueUserWorkItem()
,则将其抛出到另一个线程上}})
或者创建一个处理程序:
private static void TimerExceptionHandler(Exception ex)
{
Console.WriteLine(ex.ToString());
...
}
将其传递给ElapsedEventHandler
:
aTimer.Elapsed += (sender, e) => { OnTimedEvent(sender, e, TimerExceptionHandler); };
抛出异常时调用它:
private static void OnTimedEvent(object source, ElapsedEventArgs e, Action<Exception> timerExceptionHandler)
try
{
RunTests();
}
catch (Exception ex)
{
timerExceptionHandler(ex);
}