是否有任何理由更喜欢在 Windows 窗体应用程序中实现全局异常处理程序的这些方法中的一种而不是另一种?
第一种方法
static void Main(string[] args)
{
try
{
System.Windows.Forms.Application.Run(mainform);
}
catch (Exception ex)
{
// Log error and display error message
}
}
第二种方法
static void Main(string[] args)
{
System.Windows.Forms.Application.ThreadException +=
new ThreadExceptionEventHandler(Application_ThreadException);
System.Windows.Forms.Application.Run(mainform);
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
// Log error and display error message
}
处理 ThreadException 事件是否为您提供了 try/catch 没有的东西?
最佳答案
我对这种行为的理解是添加 ThreadException处理程序将导致表单中未处理的异常被此处理程序捕获和处理,这将允许应用程序继续运行。
在您的 try/catch 设计中,表单中第一个未处理的异常将导致应用程序停止。您将捕获异常,但应用程序随后将结束。
请注意,还有一个 AppDomain.UnhandledException在某些情况下会引发的事件(主窗口窗体线程以外的线程中未处理的异常并且未捕获 ThreadException),所有这些对您的应用程序来说都是非常糟糕的消息。
关于c# - 在 Try/Catch 中处理 Application.ThreadException 和包装 Application.Run 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452639/