您的位置:首页 > 编程语言 > C#

C#中的那些全局异常捕获

2015-05-25 16:21 459 查看
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+"\r\n"+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(); //捕获全局异常 } }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: