请教,Windows Forms程序,所有的Form均继承自一个BaseForm,有没有办法在BaseForm中捕获所有的Exception? 如题,我的想法是这样的,各个业务的画面仅仅catch他们所对应的exception。而其他的异常由BaseForm统一catch,打印log。不知道能否时间。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在baseform里 实现一个方法,在所有继承的form里 ,catch 中调用这个方法处理错误信息。 BaseForm 直接侦听“未捕获的异常”事件Application.ThreadException += ....这样就不用try-catch了——而且你也不知道应该try-catch什么地方 嗯,因为你各个业务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什么的} netmicro(麦) 高手 ,我等会就去试试看 /// <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; } 在main下定义//主线程处理异常(只处理主程序中没有使用try catch 而发生的异常,如果是子线程的话要触发主线程异常,一定要委托引用)Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(MainUiThreadException); 学C# socket编程 要看什么书好 如何获得远程IP地址 C# winform C#实现关机代码 Remoting问题 请教C#字符串连接方法 麻烦大家帮我看看这个最简单的控制台程序,第一个回答正确答案的给100分 菜鸟刚学treeview1控件,有几个简单问题想问。请进 问个关于socket的基础问题 webservice如何解析xml 在线急等!(webform)水晶报表中插入‘园饼图表’可以设置标题字体大小,标签字体大小,怎样设置 -----------"标注线后字体 求助好心人!如何在.NET中导出用户自定义控件,我想用在.NET中的其它工程中
...
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什么的
}
/// 主线程异常处理
/// </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;
}
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(MainUiThreadException);