unhandledexception C#

时间:2016-12-01 10:32:32

标签: c# timer appdomain unhandled-exception

我有这段代码,我正在使用一个计时器来调用我的RunTest()函数。如果我不使用计时器,则会捕获RunTest()中的所有未处理的异常,但是使用此计时器代码它们不会被捕获。我犯了什么错误?

TextBlock

1 个答案:

答案 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);
    }