关于c#:Application.ThreadException和AppDomain.CurrentDomain.UnhandledException有什么区别?

What's the difference between Application.ThreadException and AppDomain.CurrentDomain.UnhandledException?

好吧,这很简单:

  • Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException有什么区别?

  • 我需要两者都处理吗?

谢谢!


应用.threadexception is specific to windows forms.Winforms runs event handlers in response to message sent to it by windows.例如,点击事件,我敢肯定你知道他们。如果一个事件牵着一个例外,那么在窗口信息环中有一个后退停车,这是一个例外。

后台消防的应用程序.螺旋接收事件。如果你不超越这一点,使用者会得到一个长度。让他忽视例外,并继续运行你的程序。不是一个伟大的想法

您可以通过呼叫应用来切断此行为。在程序中设置一个主()方法。没有后台,通常的事情发生在一个无人驾驶的例外:Appdomain.unhandlexception fires和程序终端。

FWIW"Threadexception"was a very poor name choice.这没有什么可威胁的。


在使用视窗格式的应用中,未处理的例外情况在主要应用上导致Application.ThreadException的增强。如果这一事件处理完毕,则缺陷行为是,无手续例外不终止应用程序,尽管应用程序在一个未知状态中被搁置。在这种情况下,事件并不严重。在EDOCX1&0之前,应用配置文件或EDOCX1&6可以改变此行为。本发明仅适用于主要应用螺纹。在其他威胁中,事件突显了无人驾驶的例外情况。

与视觉工作室2005年开始,视觉基本应用框架为在主要应用线上未处理的例外提供了另一个事件。这项活动有一个以同一名称作为Appdomain.unhandledexception所用的事件论据对象的事件论据对象,但具有不同的性质。具体而言,该事件的论据对象具有一个ExitApplication性能,允许应用于持续运行,无视无人驾驶的例外(并放弃在一个未知状态中的应用)。在这种情况下,Appdomain.unhandledexception event is not raised.

一般来说,应用不是一个伟大的想法,但对于应用如周期性运行,这是一个很好的解决办法。

在视窗格式不创建和拥有的情况下,使用AppDomain.UnhandledException。它允许在系统故障手工报告之前对例外情况进行记录信息的应用,例外情况对用户和终端的应用。这一例外的处理不应被用于终止。最大可实现的(Program data can become corrupted when exceptions are not handled)是为以后的恢复保留Program data。在应用域未负载和应用终端之后。

与网络4开始,这一事件并不是为了使例外情况变得更为严重,例如,堆栈过度流动或进入侵权行为,除非事件的残疾者是安全的关键,并且具有EDOCX1[…]的属性。]14.This event is not raised for exceptions that corrrupt the state of the process,as stack overflows or access violations,unle

For more details,see MSDN.


OK-I had it in front of me,this bit of code from MSDN is pretty self-explanatory:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void Main(string[] args)
{
    // Add the event handler for handling UI thread exceptions to the event.
    Application.ThreadException += new
        ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);

    // Set the unhandled exception mode to force all Windows Forms
    // errors to go through our handler.
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

    // Add the event handler for handling non-UI thread exceptions to the event.
    AppDomain.CurrentDomain.UnhandledException +=
        new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    // Runs the application.
    Application.Run(new ErrorHandlerForm());
}


如果你用一个不处理的例外代码代码,那么事情就是这样的。

简单的第二个方法是创建一个无尝试的应用程序,一个例外。

现在如果你需要保险,你可以同时处理他们,但如果你抓住并处理你的exceptions正确的话,那么你就不需要UnhandledException作为一种全球性的摔跤。