zoukankan      html  css  js  c++  java
  • .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放在线程中去处理异常,放在外面的话会捕获不到
  • 相关阅读:
    298. Binary Tree Longest Consecutive Sequence
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    163. Missing Ranges
    336. Palindrome Pairs
    727. Minimum Window Subsequence
    211. Add and Search Word
    年底购物狂欢,移动支付安全不容忽视
    成为程序员前需要做的10件事
    全球首推iOS应用防破解技术!
  • 原文地址:https://www.cnblogs.com/wyp1988/p/9928636.html
Copyright © 2011-2022 走看看