gpt4 book ai didi

c# - System.Windows.Forms.Application.ThreadException 等同于控制台应用程序或 Windows 服务或任何一般进程

转载 作者:太空狗 更新时间:2023-10-29 22:01:26 25 4
gpt4 key购买 nike

在我使用的 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”。

编辑:看来我的问题被误解了,所以我重新表述了它并提供了一个更小的代码示例。

最佳答案

您不需要任何等效项,CurrentDomain.UnhandledException 事件在多线程控制台应用程序中工作得很好。但由于您启动线程的方式,它不会在您的情况下触发。您问题中的处理程序不会在 Windows 和控制台应用程序中执行。但是如果你像这样开始你的线程(例如):

new Thread(() => { 
throw new Exception("Oops, someone forgot to add a try/catch block");
}).Start();

它会开火。

Task.Factory.StartNew(...)CurrentDomain.UnhandledException 问题在许多关于 SO 的帖子中都有讨论。在这里查看一些建议:

How to handle all unhandled exceptions when using Task Parallel Library?

What is the best way to catch exception in Task?

关于c# - System.Windows.Forms.Application.ThreadException 等同于控制台应用程序或 Windows 服务或任何一般进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11411864/

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