如题,我的想法是这样的,各个业务的画面仅仅catch他们所对应的exception。而其他的异常由BaseForm统一catch,打印log。
不知道能否时间。

解决方案 »

  1.   

    在baseform里 实现一个方法,在所有继承的form里 ,catch 中调用这个方法处理错误信息。
      

  2.   

    BaseForm 直接侦听“未捕获的异常”事件Application.ThreadException += ....这样就不用try-catch了——而且你也不知道应该try-catch什么地方
      

  3.   

    嗯,因为你各个业务Form都派生自BaseForm,这样会产生多个BaseForm的实例,于是就有多个侦听 Application.ThreadException 的方法(来自不同实例的同一个方法)我相信这不是你想要的应该将其放在与 static void Main() 相同级别的地方并声明为 static即static void Main() {
      ...
      Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException);
      Application.Run(new XXXXX());
    }static void OnThreadException(object sender, ThreadExceptionEventArgs e) {
      // 这里你想怎么处理就怎么处理,例如:
      FrmDisplayError frm = new FrmDisplayError();
      frm.textBox1.Text = e.Exception.ToString();
      frm.ShowDialog();  // 又或者非常简单的一句
      MessageBox.Show("Error! " + e.Exception.ToString());  // 然后写log什么的
    }
      

  4.   

    netmicro(麦)  高手 ,我等会就去试试看
      

  5.   

    /// <summary>
            /// 主线程异常处理
            /// </summary>
            /// <param name="sender"></param>tianda
            /// <param name="t">异常参数</param>
            public static void MainUiThreadException(object sender,ThreadExceptionEventArgs t)
            {
                //1.异常分类中文解析                        
                //2.关闭全局连接            
                //3.记录本地日志、发送日志
                //4.弹出异常提示给用户
                if (MessageBox.Show("程序发生异常,"
                                + "\n错误位置:"
                                + t.Exception.Source
                                + "\n错误信息:"
                                + t.Exception.Message
                                + "请联系管理员,"
                                , "系统错误提示"
                                , MessageBoxButtons.AbortRetryIgnore
                                , MessageBoxIcon.Question
                                , MessageBoxDefaultButton.Button1
                                , MessageBoxOptions.ServiceNotification)
                                == DialogResult.Abort)
                {
                    Application.Exit();
                }
                else 
                {
                    return;
                }
                return;
            }
      

  6.   

    在main下定义//主线程处理异常(只处理主程序中没有使用try catch 而发生的异常,如果是子线程的话要触发主线程异常,一定要委托引用)
    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(MainUiThreadException);