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(); //捕获全局异常
              
            }
        }
    }
  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/twodog/p/12140335.html
Copyright © 2011-2022 走看看