首页 > 编程语言 >C# WinForm程序全局捕捉异常处理办法

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

时间:2024-07-17 12:19:24浏览次数:17  
标签:Exception C# void System Application 全局 异常 捕获 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(); //捕获全局异常
                }
            }
        }

 

标签:Exception,C#,void,System,Application,全局,异常,捕获,WinForm
From: https://www.cnblogs.com/ny-wmq/p/18307047

相关文章

  • iOS开发基础110-Core Graphics应用场景
    CoreGraphics是一种强大的二维图形绘制框架,广泛应用于iOS开发中。以下是几个常见的运用场景以及对应的代码示例:1.自定义视图绘制通过覆盖UIView的drawRect:方法,可以自定义视图的外观。示例代码:#import<UIKit/UIKit.h>@interfaceCustomView:UIView@end@implementat......
  • 【2024-ZR-C Day 1】数论基础
    1.Ex-GCD1.1.定义若\((a,b)=1\),则必然存在整数\(x\)使得\(ax\equiv1(\bmodb)\).即:\(ax+by=\gcd(a,b)\),\(x,y\)必然有解。1.2.裴蜀定理推论:若\((a,b)=1\),则必然存在整数\(x,y\)满足\(ax+by=1\).裴蜀定理:对于\(a,b\in\mathbb{Z}\),\(\existsx,......
  • Django DRF @action 装饰器
    @action装饰器在DjangoRESTFramework(DRF)中非常有用,它可以帮助你在ViewSet中创建自定义的动作,而不仅仅是依赖标准的CRUD操作(Create,Read,Update,Delete)。以下是@action装饰器的一些常见用法:1.创建自定义集合动作detail=False表示这个动作是针对整个集合的。例如,你......
  • C# 一个自己写的异步并行执行器
    有的时候咱们需要循环执行业务,如果单以处理过程不是计算密集型,就可以使用多线程并行处理,这样能大幅度提高执行效率最开始我是想着有没有现成的,结果找了半天没发现有现成的,于是就自己封装了一个,简单测试了一下发现没啥问题异步并行执行器///<summary>///异步并行执......
  • Codeforces Round 957 (Div. 3)
    知识点1.几个数相乘时,更小的数增加会比更大的数增加得到的乘积来得大题解A.OnlyPluses1.几个数相乘时,当更小的数增大时,得到的乘积会比更大的数增大来得大,也就是更小的数字权重会比较大,那么在5次+1的过程中,每次找最小值++即可#include<bits/stdc++.h>#defineintlonglon......
  • Office文件打不开如何处理
        在快节奏的现代办公环境中,MicrosoftOffice无疑是我们的得力助手,无论是起草报告、整理数据还是制作演示文稿,它都在背后默默支撑着我们的工作与学习。然而,当有一天,你突然发现重要的Office文档无法打开,屏幕上的错误信息仿佛一道无形的墙,阻隔了你与辛勤工作成果之间的......
  • Python学习笔记—100页Opencv详细讲解教程
    目录1创建和显示窗口...-4-2加载显示图片...-6-3保存图片...-7-4视频采集...-8-5视频录制...-11-6控制鼠标...-12-7TrackBar控件...-14-8.RGB和BGR颜色空间...-16-9.HSV和HSL和YUV..-17-10颜色空间的转化...-18-11mat的深......
  • 【工具介绍】nuclei-yaml脚本编写
    文章目录YAML脚本语法基础nuclei模板语法常见使用场景命令执行sql延时注入任意文件读取跨站脚本攻击反序列化漏洞弱密码文件上传nuclei是一款基于Go语言开发的快速、灵活的自动化漏洞扫描工具,它使用YAML格式的模板来定义扫描规则。YAML(YAMLAin’tMarkupLa......
  • Vue3 - 微信公众号H5网站使用微信扫一扫(微信扫码),苹果报错 {“errMsg“:“scanQRCode
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在vue3|nuxt3微信公众号网页开发中,微信移动端h5网页使用JS-SDK中的“微信扫码(微信扫一扫)”wx.scanQRCode接口,苹果ios系统真机测试时出现报错:“errMsg”:“scanQRCode:thepermissi......
  • XX2104 培训【C++解决】
    描述某培训机构的学员有如下信息:姓名(字符串)年龄(周岁,整数)去年NOIP成绩(整数,且保证是5的倍数)经过为期一年的培训,所有同学的成绩都有所提高,提升了20%(当然NOIP满分是600分,不能超过这个得分)。输入学员信息,请设计一个结构体储存这些学生信息,并设计一个函数模拟培训......