gpt4 book ai didi

c# - ThreadExceptionEventHandler 和调用委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 15:45:27 24 4
gpt4 key购买 nike

如果我将 ThreadExceptionEventHandler 分配给 Application.ThreadException,为什么当我在主应用程序线程上使用控件调用委托(delegate)方法时,该委托(delegate)抛出的任何异常都没有触发事件处理程序?


static void Main()
{
...

Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.Run(new Form1());
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Console.Error.Write("A thread exception occurred!");
}

...

private void Form1_Load(object sender, EventArgs e)
{
Thread syncThread = new Thread(new ThreadStart(this.ThrowException));
syncThread.Start();
}

private void ThrowException()
{
button1.Invoke(new MethodInvoker(delegate
{
// Not handled by ThreadExceptionEventHandler?
throw new Exception();
}));
}

上下文是我有一个后台线程从一个表单启动,该表单抛出一个未处理的异常,该异常终止了应用程序。我知道这个线程将变得不可靠,因为它依赖于网络连接,因此随时可能被终止,但我只是想知道为什么这种情况没有像我预期的那样发生?

最佳答案

改为使用 AppDomain.CurrentDomain.UnhandledException 来捕获在非 Windows 窗体创建和拥有的线程中发生的异常

您肯定会看到 MSDN article澄清这个问题

关于c# - ThreadExceptionEventHandler 和调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5182719/

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