WINFORM中有没有集中处理异常的类?
想方便集中处理或记录,DELPHI中有个TApplictionEvents,它的实例能收集整个应用程序的异常信息。
NET中有吗?或者有何方法?

解决方案 »

  1.   

    winform中,可以自己定义一个异常处理类,每次出错误,都通过委托的方式,调用自己的异常处理
      

  2.   

    启动的时候在Main中写Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    然后在Application_ThreadException里面统一处理一些异常
      

  3.   


    我在程度入口点加入代码:
                    BaseFrame.ThreadExceptionHandler ErrHandler = new BaseFrame.ThreadExceptionHandler();
                    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(ErrHandler.Application_ThreadException);                //错误处理类。
    namespace BaseFrame
    {
        public class ThreadExceptionHandler
        {
            public void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                MyMessageBox.ShowWarning("捉到你啦");
            }
        }
    }
    竟然不起作用,~~
      

  4.   

    throw new ArgumentException("测试一下");自行抛出来成功捉住。有点明白了,应该是用了结构化异常处理给提前拦截了。
      

  5.   

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;namespace CodingMouse.CMCSharpSDK.UI
    {
        static class Program
        {
            /// <summary>
            /// 当前应用程序
            /// </summary>
            static string applicationName = "CMCSharpSDK";        /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                // 注册全局线程异常处理事件侦听
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                Application.Run(new Forms.frmLogin(applicationName));
                //Application.Run(new Forms.frmConnectionConfig());
            }        /// <summary>
            /// 全局线程异常处理事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                // 显示全局异常提示
                Messagebox.Show(ex.message);
            }
        }
    }
      

  6.   

    这应该算是WinForm应用程序的最后一道防线了,把自己的Program.cs内容改成上面这样就可以了。
      

  7.   

    第一次在CSDN提高,得到各方支持,谢谢。我以后会多灌CSDN,互相提高。
      

  8.   

    // 显示全局异常提示
                Messagebox.Show(ex.message);
    这行有问题,提示错误 1 当前上下文中不存在名称“Messagebox”
    错误 2 当前上下文中不存在名称“ex”请帮忙!!!
      

  9.   

    是不是应该为MessageBox.Show(e.Exception);
      

  10.   

    在program.cs  
          static void Main()
            {
     ThreadExceptionHandler handler = new ThreadExceptionHandler();
                Application.ThreadException += new ThreadExceptionEventHandler(handler.Application_ThreadException);
    …………} internal class ThreadExceptionHandler
        {
            //实现错误异常事件
            public void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            {
                try
                {
                    //如果用户单击"Abort"则退出应用程序
                    DialogResult result = ShowThreadExceptionDialog(e.Exception);
                    if (result == DialogResult.Abort)
                    {
                        Application.Exit();
                    }
                }
                catch
                {
                    try
                    {
                        MessageBox.Show("严重错误", "严重错误", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    }
                    finally
                    {
                        Application.Exit();
                    }
                }
            }
            private DialogResult ShowThreadExceptionDialog(Exception e)
            {
                string errorMsg = "错误信息:\t\t" + e.Message + "\t\t" + e.GetType() + "\t\t" + e.StackTrace;
                return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
            }
        }