在 WinForms 我使用:
- System.Windows.Forms.Application.ThreadException
- System.Windows.Application.UnhandledException
我应该为非 Winforms 多线程应用程序使用什么?
考虑以下 C# .NET 4.0 中的完整代码:
using System;
using System.Threading.Tasks;
namespace ExceptionFun
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Task.Factory.StartNew(() =>
{
throw new Exception("Oops, someone forgot to add a try/catch block");
});
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//never executed
Console.WriteLine("Logging fatal error");
}
}
}
我在 stackoverflow 上看到了大量类似的问题,但没有一个包含令人满意的答案。大多数答案都是类型:“您应该在代码中包含正确的异常处理”或“使用 AppDomain.CurrentDomain.UnhandledException”。
编辑:看来我的问题被误解了,所以我重新制定了它并提供了一个更小的代码示例。