zoukankan      html  css  js  c++  java
  • (转)C#中的那些全局异常捕获

    C#中的那些全局异常捕获(原文链接:http://www.cnblogs.com/taomylife/p/4528179.html)

     
    1.WPF全局捕获异常
     
        public partial class App : Application
        {
            public App()
            {
       // 在异常由应用程序引发但未进行处理时发生。主要指的是UI线程。
                this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
    //  当某个异常未被捕获时出现。主要指的是非UI线程
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            }
     
            void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
    //可以记录日志并转向错误bug窗口友好提示用户
                if (e.ExceptionObject is System.Exception)
                {
                    Exception ex =(System.Exception)e.ExceptionObject;
                    MessageBox.Show(ex.Message);  
                }
            }
     
            void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
            {
    //可以记录日志并转向错误bug窗口友好提示用户
                e.Handled = true;
                MessageBox.Show("消息:"+e.Exception.Message+" "+e.Exception.StackTrace);
                
            }
     
     
     
    2.winform捕获全局异常
     
     
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
                Application.ThreadException += Application_ThreadException;////UI线程异常
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;////多线程异常
            }
            /// <summary>
            /// 多线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
               //可以记录日志并转向错误bug窗口友好提示用户
                Exception ex = e.ExceptionObject as Exception;
                MessageBox.Show(ex.Message);
            }
     
            /// <summary>
            /// UI线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
    //可以记录日志并转向错误bug窗口友好提示用户
                MessageBox.Show(e.Exception.Message);
             
            }
        }
    }
     
    3.MVC程序全局捕获异常
     
    namespace 全局异常捕获测试
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                
                AreaRegistration.RegisterAllAreas();
                GlobalFilters.Filters.Add(new CustomExceptionAttribute());
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
        }
     
     
        [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
        public class CustomExceptionAttribute : FilterAttribute, IExceptionFilter
        {
            public virtual void OnException(ExceptionContext filterContext)
            {
                string message = string.Format("消息类型:{0}<br>消息内容:{1}<br>引发异常的方法:{2}<br>引发异常源:{3}"
                    , filterContext.Exception.GetType().Name
                    , filterContext.Exception.Message
                     , filterContext.Exception.TargetSite
                     , filterContext.Exception.Source + filterContext.Exception.StackTrace
                     );
            }
        }
    }
     
     
    4.web form全局异常捕获
     
     
    namespace WebForm全局异常捕获
    {
        public class Global : System.Web.HttpApplication
        {
            protected void Application_Start(object sender, EventArgs e)
            {
                
            }
            void Application_Error(object sender, EventArgs e)
            {
                // 在出现未处理的错误时运行的代码
                Exception objExp = HttpContext.Current.Server.GetLastError(); //捕获全局异常
              
            }
        }
    }
  • 相关阅读:
    commons-lang3工具类学习(三)
    commons-lang3工具类学习(二)
    commons-lang3工具类学习(一)
    Spring之ClassPathResource加载资源文件
    Spring详解(十)加载配置文件
    java IO流总结
    Spring自定义注解配置切面实现日志记录
    使用@Cacheable 踩过的坑
    将BufferedImage转换为InputStream,亲测可用
    计算两个日期之间间隔的天数
  • 原文地址:https://www.cnblogs.com/twodog/p/12140334.html
Copyright © 2011-2022 走看看