• .NET&C#的异常处理


    • 应用程序未捕获异常的处理
      • 处理未捕获的异常是每个应用程序起码有的功能
      • 无论是Windows窗体程序还是WPF程序,我们都看到捕获的异常当中分为"窗体线程异常"和"非窗体线程异常"。
      • WinForm等类型的应用程序
        • 使用UnhandledException来处理非 UI 线程异常
          •  1 static void Main(string[] args)
             2         {
             3             AppDomain.CurrentDomain.UnhandledException +=new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
             4         }
             5 
             6         static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
             7         {
             8             Exception error = (Exception)e.ExceptionObject;
             9             Console.WriteLine("MyHandler caught : "+ error.Message);
            10         }
            View Code
          • 值得注意的是,UnhandledException提供的机制并不能阻止应用程序终止,也就是说,CurrentDomain_UnhandledException方法执行后,应用程序就会被终止。
        • 使用ThreadException来处理 UI 线程异常
          •  1         [STAThread]
             2         static void Main()
             3         {
             4             Application.ThreadException +=new ThreadExceptionEventHandler(UIThreadException);
             5         }
             6 
             7         private static void UIThreadException(object sender, ThreadExceptionEventArgs t)
             8         {
             9             try
            10             {
            11                 string errorMsg ="Windows窗体线程异常 : 
            
            ";
            12                 MessageBox.Show(errorMsg + t.Exception.Message + Environment.NewLine + t.Exception.StackTrace);
            13             }
            14             catch
            15             {
            16                     MessageBox.Show("不可恢复的Windows窗体异常,应用程序将退出!");
            17             }
            18         }
            View Code
          • 值得注意的是,ThreadException可以阻止应用程序终止
      • WPF类型的应用程序
        • WPF的UI线程和Windows的UI线程有点不一样。WPF的UI线程是交给一个叫做调度器的类:Dispatcher。
        •  1 代码
           2 
           3 public App()
           4         {
           5             this.DispatcherUnhandledException +=new DispatcherUnhandledExceptionEventHandler(Application_DispatcherUnhandledException);
           6             AppDomain.CurrentDomain.UnhandledException +=new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
           7         }
           8 
           9         void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
          10         {
          11             try
          12             {
          13                 Exception ex = e.ExceptionObject as Exception;
          14                 string errorMsg ="非WPF窗体线程异常 : 
          
          ";
          15                 MessageBox.Show(errorMsg + ex.Message + Environment.NewLine + ex.StackTrace);
          16             }
          17             catch
          18             {
          19                     MessageBox.Show("不可恢复的WPF窗体线程异常,应用程序将退出!");
          20             }
          21         }
          22 
          23         privatevoid Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
          24         {
          25             try
          26             {
          27                 Exception ex = e.Exception;
          28                 string errorMsg ="WPF窗体线程异常 : 
          
          ";
          29                 MessageBox.Show(errorMsg + ex.Message + Environment.NewLine + ex.StackTrace);
          30             }
          31             catch
          32             {
          33                     MessageBox.Show("不可恢复的WPF窗体线程异常,应用程序将退出!");
          34             }
          35         }
          View Code
    • 多线程中的异常处理
      • try...catch放在线程中去处理异常,放在外面的话会捕获不到
  • 相关阅读:
    .gitignore语法
    每日阅读
    css摘要
    ubuntu安装qq、微信
    django中views中方法的request参数
    js html标签select 中option 删除除了第一行外的其他行
    js 新增标签、标签属性
    python中None与0、Null、false区别
    python class中__init__函数、self
    for foreach循环
  • 原文地址:https://www.cnblogs.com/wyp1988/p/9928636.html
Copyright © 2020-2023  润新知