精华内容
下载资源
问答
  • winform全局异常处理

    千次阅读 2016-06-15 17:45:13
    winform全局异常处理winform的异常主要包括UI线程异常和处理非UI线程异常。如何处理这两个异常呢?1.使用Application.ThreadException事件可以处理UI线程的异常,并且可以阻止应用程序终止。2.使用Application....

    winform全局异常处理

    winform的异常主要包括UI线程异常和处理非UI线程异常。

    如何处理这两个异常呢?

    1.使用Application.ThreadException事件可以处理UI线程的异常,并且可以阻止应用程序终止。

    2.使用Application.UnhandledException事件来处理非UI线程异常,但是却并不能阻止应用程序的终止。

    那么如果要完成一个自动处理的模块,当异常抛出后,检索异常的来源,并记录到日志并且处理异常后,重新执行出现异常的模块,使用上面的UnhandledException事件可以很好的检索到异常的发生,但是处理后,应用程序还是会退出的。

    参照msdn上的Enterprise Library中的Exception Application Block,进行全局异常处理的方法如下所示:

    static void Main()
    {
        Application.EnableVisualStyles();
    
        Application.SetCompatibleTextRenderingDefault(false);
        Application.SetCompatibleTextRenderingDefault(false);
    
        #region 线程异常处理 全局的异常处理
    
        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    
    #endregion
    Application.Run(new FrmLogin());
    }
    
    /// <summary>
    /// 线程异常处理
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
    
    //在此处添加上你要写日志的方法
    MessageBox.Show(e.Exception.Message);
    }
    
    static void CurrentDomain_UnhandledException (object sender,System.Threading.ThreadExceptionEventArgs e)
    
    {
    
      //此处写获取的日志 
    
    LogUnhandledException(e.ExceptionObject);
    }
    展开全文
  • Winform 全局异常捕获

    2018-07-21 19:14:00
    初学 Winform 时,相信很多人都遇到过自己的程序在运行中出现了没有捕获的异常...但如果我们想要给用户显示一个比较友好的信息框,或者记录上传错误日志等等,那么就需要添加全局异常处理程序。 要为 Winform 程序...

    初学 Winform 时,相信很多人都遇到过自己的程序在运行中出现了没有捕获的异常,导致程序退出的问题,在这种情况下,程序往往会弹出一个很不友好的信息框,然后强行退出。

    程序出现了未捕获的异常,系统便认为它无法再继续工作了,所以强行结束了程序,这也是很正常的行为。但如果我们想要给用户显示一个比较友好的信息框,或者记录上传错误日志等等,那么就需要添加全局异常处理程序。

    要为 Winform 程序添加全局异常处理程序,需要对 UI 线程和其他线程分别处理,代码如下:

    static class Program
    {
        /// 
        /// 应用程序的主入口点。
        /// 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            // 设置 UI 线程异常处理程序,必须在 Application.Run() 方法之前添加
            Application.ThreadException += OnThreadException;
            // 要捕获其他线程的异常,必须先调用 SetUnhandledExceptionMode() 方法指示程序如何处理异常
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            // 设置其他线程异常处理程序,需要注意的是,此异常处理程序并不能阻止应用被终止
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
            Application.Run(new MainForm());
        }
        private static void OnThreadException(object sender, ThreadExceptionEventArgs e)
        {
            // UI 线程异常处理,根据需要可以选择退出或不退出应用
            // ShowError((e.ExceptionObject as Exception).Message);
        }
        private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // 其他线程异常处理,此方法结束后应用会被强制退出
            // ShowError(e.Exception.Message);
        }
    }

     

    转载于:https://www.cnblogs.com/andorxor/p/9347686.html

    展开全文
  • C#Winform 全局异常捕获

    2020-10-28 15:54:18
    在Visual Studio中调试的时候,我们可以借助VS的调试工具进行调试,一旦出现未处理的异常时,VS也会在第一时间捕获并显示出来。随着开发的进行,终于程序要打包上线了。那么在上线之出了BUG我们该如何处理呢? ...

    在Visual Studio中调试的时候,我们可以借助VS的调试工具进行调试,一旦出现未处理的异常时,VS也会在第一时间捕获并显示出来。随着开发的进行,终于程序要打包上线了。那么在上线之出了BUG我们该如何处理呢?

     

    相信如果各位年龄够大,应该都见识过QQ出错崩溃吧?在零几年的时候QQ崩溃还不是一件稀罕事儿。每当QQ崩溃的时候都会弹出一个BUGReporter程序,会希望我们将出错的报告发送给腾讯

    其实我们标题所说的全局异常捕获主要目标并不是为了将异常处理掉防止程序崩溃。因为当错误被你的全局异常捕获器抓到的时候,已经证实了你程序中存在BUG。一般而言,我们的全局异常捕获主要作用就是接收到异常之后进行异常的反馈。

     

    简单粗暴:在Program.cs使用Try...Catch...

    只要我们在程序把异常抛给CLR之前,抢先把异常捕获,那就可以做到全局异常处理了。不过这个try...catch...就必须放在栈的最下方。程序运行时栈的最下方函数其实就是程序运行时第一个调用的函数——main()函数。

    比如说我有这么一个Windows窗体程序,一个Program.cs类,一个FrmMain.cs窗口。

    Program.cs类内容如下:

    static class Program

    {

        /// <summary>

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

        /// </summary>

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new FrmMain());

        }

    }

    FrmMain里有一个Button,其点击事件如下:

    private void button1_Click(object sender, EventArgs e)

    {

        throw new Exception();

    }

     

    如果就现在这样的代码而言,只要在运行时单击这个Button就能时整个程序报错崩溃。

     

    现在我们改造Program.cs里的main()函数,改成以下内容:

    /// <summary>

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

    /// </summary>

    [STAThread]

    static void Main()

    {

        try

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new FrmMain());

        }

        catch (Exception ex)

        {

            MessageBox.Show(string.Format("捕获到未处理异常:{0}\r\n异常信息:{1}\r\n异常堆栈:{2}", ex.GetType(), ex.Message, ex.StackTrace));

        }

    }

     

    现在再次执行程序,单击button1,我们可以看到现在这次的这个异常被main()函数中的try...catch...所抓获了。

     

     

     

     

     

    展开全文
  • winform全局异常捕获

    2017-04-05 14:46:00
    这就是我们要在发生未处理异常时处理的方法,我这是写出错详细信息到文本,如出错后弹出一个漂亮的出错提示窗体,给大家做个参考 /// 做法很多,可以是把出错详细信息记录到文本、数据库,发送出错邮件到作者...

     

    /// <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("系统出现未知异常,请重启系统!");
            }

     

    转载于:https://www.cnblogs.com/xuxiaoshuan/p/6668674.html

    展开全文
  • sb.AppendLine("【异常类型】:" + e.GetType().Name); sb.AppendLine("【异常信息】:" + e.Message); sb.AppendLine("【堆栈调用】:" + e.StackTrace); LogHelper.WriteErrorLog(sb.ToString()); string ...
  • 一、在Winform程序中捕获全局异常 在winfrom中我们需要了解Application对象中的两个事件 ①Application.ThreadException 事件--当UI线程中某个异常未被捕获时出现。 ②AppDomain.UnhandledException 事件--当非...
  • sb.AppendLine("****************************异常文本****************************"); sb.AppendLine("【出现时间】:" + DateTime.Now.ToString()); if (ex != null) { sb.AppendLine("【异常类型】:" + ex...
  • static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { // Add...
  • C# WinForm捕获全局异常

    2016-03-21 16:06:00
    网上找的C# WinForm全局异常捕获方法,代码如下: static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() ...
  • winform全局捕获异常

    2019-06-29 09:23:21
    public static void ExceptionControl() { //设置应用程序处理异常方式:ThreadException处理 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); ...
  • winform捕获全局异常

    2020-01-15 20:41:14
    winform中捕获全局异常,其中Application.ThreadException捕获UI线程异常,AppDomain.CurrentDomain.UnhandledException捕获应用程序域内的未处理异常(非UI线程异常),注意如果有一个以上的类似Application.Run...
  • WinForm捕获全局异常

    2021-01-13 09:08:43
    针对异常,我们肯定无法事先全部预知,所以进行全局异常捕获还是很有必要的。 封装类 public class ExceptionHelper { public static event Action ExceptionOver; public static void AddGlobalObserve() ...
  • winform 记录全局异常捕获 原文:winform 记录全局异常捕获这篇文章主要是备用 记录winform程序捕获全局异常。 /// <summary> /// 应用程序的主入口点。 /// </summary> ...
  • C# Winform全局捕捉异常

    2012-03-06 10:14:00
    为了能够捕捉到程序的异常,我们需要加一个全局异常的捕捉代码,当软件无故退出的时候,这样就能发现异常出现的具体位置。网上有一些代码,但是没有说明具体的用法,有的是创建了一个异常捕捉类,在程序入口点去实例...
  • 许多小公司的项目都缺少异常处理模块...以下是根据网上找的C#winform全局异常捕获做了点修改。(等项目异常处理全部完成后,将心得体会做个记录,此处暂对全局异常捕获做个记录) 代码如下: static class Program { ///
  • c# winform捕获全局异常,并记录日志
  • 【改进】C# WinForm捕获全局异常 SamWang
  • 写入全局异常 static void Main() { #region 全局异常注册 Application.ThreadException += Application_ThreadException; //UI线程异常 AppDomain.CurrentDomain.UnhandledException += CurrentDomain...
  • C# winform 捕获全局异常

    千次阅读 2015-07-29 09:50:35
    为了能够捕捉到程序的异常,我们需要加一个全局异常的捕捉代码,当软件无故退出的时候,这样就能发现异常出现的具体位置。 网上有一些代码,但是没有说明具体的用法,有的是创建了一个异常捕捉类,在程序入口点去...
  • winform 程序异常捕获全局处理
  • winform捕捉全局异常

    2015-08-25 16:02:00
    /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { try { //设置应用程序处理异常方式:ThreadException处理...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 129
精华内容 51
关键字:

winform全局异常