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放在线程中去处理异常,放在外面的话会捕获不到
  • 相关阅读:
    C# 将DLL制作CAB包并在浏览器下载,自动安装。(Activex)(包括ie打开cab包一直弹出用户账户控制,确定之后无反应的解决办法。)
    C#解决WebClient不能下载https网页内容
    SQL Server 将两行或者多行拼接成一行数据
    IIS反向代理
    C# HTTP请求对外接口、第三方接口公用类
    SQL SERVER常用语法记录
    SQL SERVER 实现相同记录为空显示(多列去除重复值,相同的只显示一条数据)
    百度编辑器插入视频 实现可实时预览以及支持手机查看
    百度编辑器 动态修改上传图片路径以及上传视频路径
    .Net Core Api发布时报502.5 [The Application process failed to Start]问题的解决原因
  • 原文地址:https://www.cnblogs.com/wyp1988/p/9928636.html
Copyright © 2011-2022 走看看