如果您的意思是处理Application.ThreadException
事件:它仅在从 WinForms 线程抛出的异常时触发。通常,应用程序中有一个 WinForms 线程:主线程。
更新。
这是演示Application.ThreadException
和 AppDomain.UnhandledException 行为差异的示例:
1)Program
类:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Run(new Form1());
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Debug.WriteLine(Thread.CurrentThread.Name);
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
Debug.WriteLine(Thread.CurrentThread.Name);
}
}
2)主窗体(一个有两个按钮的窗体)代码隐藏:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
throw new InvalidOperationException();
}
private void button2_Click(object sender, EventArgs e)
{
new Thread(() => { throw new InvalidOperationException(); })
{
Name = "Worker Thread"
}.Start();
}
}
当您单击 button1 时,您会从 WinForms 线程中抛出异常。Application_ThreadException
因此,默认情况下将处理此异常。
当您单击 button2 时,您会从不是 WinForms 线程的工作线程抛出异常。Application.ThreadException
在这种情况下不会触发,而是AppDomain.UnhandledException
触发事件(并被CurrentDomain_UnhandledException
调用,在输出窗口中产生“工作线程”行)。