.net 下程序退出捕获

 一:控制台应用程序 

         通过为当前AppDomain添加 UnhandledException 事件处理程序。

AppDomain.CurrentDomain.UnhandledException += 
               new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler);
static void UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)  { …… }

二:  WinForm窗体应用程序

未处理的异常将引发Application.ThreadException事件。

a)         如果异常发生在主线程中,默认行为是未经处理的异常不终止该应用程序。在这种情况下,不会引发 UnhandledException 事件。但可以在在挂钩 ThreadException 事件处理程序之前,使用应用程序配置文件或者使用 Application.SetUnhandledExceptionMode() 方法将模式设置为 UnhandledExceptionMode.ThrowException 来更改此默认行为。

b)         如果异常发生在其它线程中,将引发 UnhandledException 事件。

Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException) 
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)  { …… }

三: ASP.NET应用程序

要截获ASP.NET 的未捕获异常,我们需要为每个应用程序域安装事件钩子。这个过程需要分两步完成:

a)         首先创建一个实现IHttpModule接口的类

public class UnhandledExceptionModule : IHttpModule
{
    ……
    static object _initLock = new object();
    static bool _initialized = false;
    public void Init(HttpApplication context)
    {
        // Do this one time for each AppDomain.
        lock (_initLock)
        {
            if (!_initialized)
            {
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
                _initialized = true;
            }
        }
    }
}

b)         第二步:修改web.config,在 system.web 段中加入

<httpModules>
  <add name="UnhandledExceptionModule" type="WebMonitor.UnhandledExceptionModule" />
</httpModules>

 

 

posted @ 2021-04-27 14:16  辣根弟弟  阅读(149)  评论(0编辑  收藏  举报