winform 記錄全局異常捕獲


這篇文章主要是備用

記錄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("系統出現未知異常,請重啟系統!");
        }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM