gpt4 book ai didi

c# - 如何获取 Timer Elapsed 事件中发生的异常?

转载 作者:IT王子 更新时间:2023-10-29 04:06:05 25 4
gpt4 key购买 nike

我正在使用 Windows 窗体应用程序并拥有一个使用 System.Timers.Timer 定期检查数据库数据的管理器类。

如何将计时器 Elapsed 事件处理程序中发生的异常传递给主应用程序?如果我使用下面的代码,异常将被“吞噬”,并且主应用程序永远不会获取它(即使我有 ThreadException 和 UnHandledException 的处理程序)。

// Main Form
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

// Manager class
private System.Timers.Timer _timer;

void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
doSomeDatabaseActions();
}
catch (Exception ex)
{
throw new ApplicationException("How do I get this error back into main thread...", ex);
}
}

最佳答案

如果您无权访问主线程,您可以在另一个非计时器线程上抛出异常:

catch (Exception exception)
{
ThreadPool.QueueUserWorkItem(
_ => { throw new Exception("Exception on timer.", exception); });
}

关于c# - 如何获取 Timer Elapsed 事件中发生的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3749785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com