C# WinForm程序全局捕捉异常处理办法

复制代码
     1.winform捕获全局异常
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                //处理未捕获的异常   
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                //处理UI线程异常
                Application.ThreadException += Application_ThreadException;
                //处理多线程异常
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandleException;
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            /// <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);
            }
            /// <summary>
            /// 多线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void CurrentDomain_UnhandleException(object sender, UnhandledExceptionEventArgs e)
            {
                //可以记录日志并转向错误bug窗口友好提示用户
                Exception ex = e.ExceptionObject as Exception;
                MessageBox.Show(ex.Message);
            }
        }

        2.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 + "\r\n" + e.Exception.StackTrace);
            }
        }

        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(); //捕获全局异常
                }
            }
        }
复制代码

 

posted @   感冒药啊  阅读(254)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示