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