为了账号安全,请及时绑定邮箱和手机立即绑定

WinForm捕获全局异常(捕获未处理的异常)

标签:
C# .NET

转至https://mp.weixin.qq.com/s/ZEs5MwjLA7WI1irbXtmD5g

using PaiXie.Pos.Client.Core;

using PaiXie.Utils;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading;

using System.Windows.Forms;

namespace PaiXie.Pos.Client {

  static class Program {

    

    /// <summary>

    /// 应用程序的主入口点。

    /// </summary>

    [STAThread]

    static void Main() {

      try {

        //可定义多个线程

            Thread _UserMessageThread;                   

        _UserMessageThread = new Thread(new ThreadStart(LoginManager.GetInstance().test));

        _UserMessageThread.IsBackground = true;

        _UserMessageThread.Start();


        //处理未捕获的异常  

        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

        //处理UI线程异常  

        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

        //处理非UI线程异常  

        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

        Application.EnableVisualStyles();

        Application.SetCompatibleTextRenderingDefault(false);

        Xw.Common.Sys.SysConfig.AppExwcutePath = Application.ExecutablePath;

        Xw.Common.Sys.SysConfig.AppStartPath = Application.StartupPath;

        Xw.Common.Sys.SysConfig.Version = "V1.0.0";

        Xw.Common.Sys.SysConfig.SoftFullName = "拍鞋网";

        Xw.Common.Sys.SysConfig.SoftName = "软件园店";

        if (!Xw.Common.Sys.SysConfig.IsOnlyRunSoft("PaiXie.Pos.Client")) {

          Xw.Common.Sys.MsgBoxWin.ShowInformation("该程序已运行!");

          return;

        }

        Application.Run(new Login());

      }

      catch (Exception ex) {

        string str = "";

        string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";

        if (ex != null) {

          str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",

             ex.GetType().Name, ex.Message, ex.StackTrace);

        }

        else {

          str = string.Format("应用程序线程错误:{0}", ex);

        }

        Helper.GetInstance().PlanLog(str, LogType.应用程序异常.ToString());    

        //frmBug f = new frmBug(str);//友好提示界面

        //f.ShowDialog();

        MessageBox.Show("发生致命错误,请及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

      }  

    }

    /// <summary>

/// 处理未捕获的异常

    ///这就是我们要在发生未处理异常时处理的方法,我这是写出错详细信息到文本,如出错后弹出一个漂亮的出错提示窗体,给大家做个参考

    ///做法很多,可以是把出错详细信息记录到文本、数据库,发送出错邮件到作者信箱或出错后重新初始化等等

    ///这就是仁者见仁智者见智,大家自己做了。

    /// </summary>

    /// <param name="sender"></param>

    /// <param name="e"></param>

    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) {


      string str = "";

      string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";

      Exception error = e.Exception as Exception;

      if (error != null) {

        str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",

           error.GetType().Name, error.Message, error.StackTrace);

      }

      else {

        str = string.Format("应用程序线程错误:{0}", e);

      }

      Helper.GetInstance().PlanLog(str, LogType.应用程序异常.ToString());  

      //frmBug f = new frmBug(str);//友好提示界面

      //f.ShowDialog();

      MessageBox.Show("发生致命错误,请及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

    }

//处理UI线程异常

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {

      string str = "";

      Exception error = e.ExceptionObject as Exception;

      string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";

      if (error != null) {

        str = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}", error.Message, error.StackTrace);

      }

      else {

        str = string.Format("Application UnhandledError:{0}", e);

      }

      Helper.GetInstance().PlanLog(str, LogType.应用程序异常.ToString());  

      //frmBug f = new frmBug(str);//友好提示界面

      //f.ShowDialog();

      MessageBox.Show("发生致命错误,请停止当前操作并及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

    }

  }

}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件测试工程师
手记
粉丝
3
获赞与收藏
14

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消