• winform全局异常捕获


    /// <summary>
            ///   应用程序的主入口点。
            /// </summary>
            public static ApplicationContext context;
    
    
            [STAThread]
            private static void Main()
            {
                try
                {
                    //处理未捕获的异常   
                    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                    //处理UI线程异常   
                    Application.ThreadException += Application_ThreadException;
                    //处理非UI线程异常   
                    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
    
                    var aProcessName = Process.GetCurrentProcess().ProcessName;
                    if ((Process.GetProcessesByName(aProcessName)).GetUpperBound(0) > 0)
                    {
                        MessageBox.Show(@"系统已经在运行中,如果要重新启动,请从进程中关闭...", @"系统警告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }
                    else
                    {
                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
    
                        var sp = new SplashForm(); //create splash screen
                        sp.Show(); //show splash screen
                        context = new ApplicationContext();
                        context.Tag = sp;
                        Application.Idle += Application_Idle; //注册程序运行空闲去执行主程序窗体相应初始化代码
                        Application.Run(context);
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Log(ex);
                    MessageBox.Show("系统出现未知异常,请重启系统!");
                }
            }
    
            //初始化等待处理函数
            private static void Application_Idle(object sender, EventArgs e)
            {
                Application.Idle -= Application_Idle;
                if (context.MainForm == null)
                {
                    var mw = new Login();
                    //YYQTestForm mw = new YYQTestForm();
    
                    context.MainForm = mw;
                    var sp = (SplashForm) context.Tag;
                    sp.Close(); //关闭启动窗体 
                    mw.Show(); //启动主程序窗体
                }
            }
    
    
            ///<summary>
            ///  这就是我们要在发生未处理异常时处理的方法,我这是写出错详细信息到文本,如出错后弹出一个漂亮的出错提示窗体,给大家做个参考
            ///  做法很多,可以是把出错详细信息记录到文本、数据库,发送出错邮件到作者信箱或出错后重新初始化等等
            ///  这就是仁者见仁智者见智,大家自己做了。
            ///</summary>
            ///<param name="sender"> </param>
            ///<param name="e"> </param>
            private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            {
                var ex = e.Exception;
                if (ex != null)
                {
                    LogHelper.Log(ex);
                }
    
                MessageBox.Show("系统出现未知异常,请重启系统!");
            }
    
            private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                var ex = e.ExceptionObject as Exception;
                if (ex != null)
                {
                    LogHelper.Log(ex);
                }
    
                MessageBox.Show("系统出现未知异常,请重启系统!");
            }
  • 相关阅读:
    【转】Spring Boot run方法执行流程
    自定义Google扩展皮肤
    vscode定制注释为斜体样式
    2022年·阅读·离散数学&数据结构
    2022年·阅读
    今天发现rutracker放开了注册入口
    重置 Windows安全中心
    数据结构之堆 → 不要局限于堆排序
    心跳包设计
    react js—— annotation (注释) in renders
  • 原文地址:https://www.cnblogs.com/xuxiaoshuan/p/6668674.html
Copyright © 2020-2023  润新知