日期:2014-05-18  浏览次数:20728 次

◆如何捕获所有异常◆
是这样的:
我的winform程序有许多模块,很多地方用了
try
{...}
catch
{...}
来保护,因为代码很多,有的地方写了,有的地方没写,而这样写也很麻烦,
有什么办法统一在一个地方写,能捕捉到没有捕获过(因为有些代码已经编写try...catch...保护)的任何异常?
期待高手回答

------解决方案--------------------
try catch并不是为了保护而存在的,是为了你方便的恢复这个异常,如果你不准备恢复这个异常完全没必要哪都加try catch.(包括你准备把这个异常信息写进日志,供以后常看)
------解决方案--------------------
同样的关注中....
不过我有很多不用捕捉错误...
------解决方案--------------------
一般用三层架构
在业务层和UI层捕捉异常就可以了
你的情况只能在每个方法加一个
try 
{...} 
catch 
{...} 
方法的所有代码都包括在try里

------解决方案--------------------
那这样就不会有像你所说的try catch太多而不好管理,一层一层的try catch上去 ,已经写过日志的地方没其他会抛异常的操作就不要try catch了
------解决方案--------------------
csdn都弹"黄白"错误呢,楼主是不是想每个方法体都一开始生成像下面这个样子
void A()
{
throw new xxxException();
}
这样是没必要的,因为这样你没办法去关心比较重要的异常
------解决方案--------------------
探讨
找到方法了:

Application.ThreadException += GetException; //GetException为自己处理的方法


------解决方案--------------------
牛人就是这样培养出来的
------解决方案--------------------
Program.cs

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(AppThreadException);
Application.Run(new Form1());
}

private static void AppThreadException(object source, System.Threading.ThreadExceptionEventArgs e)
{
string errorMsg = string.Format("未处理异常: \n{0}\n", e.Exception.Message);
errorMsg += Environment.NewLine;

DialogResult result = MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);

if (result == DialogResult.Abort)
{
Application.Exit();
}
}

------解决方案--------------------
using System.Threading;
Application.ThreadException += getmessage; 
private static void getmessage(object sender, ThreadExceptionEventArgs e) 
{
MessageBox.Show(e.Exception.Message);
}
------解决方案--------------------
“我就是希望把所有的异常信息写进日志,供以后看”

可以自己写个类,用来保存错误信息,具体保存在什么地方由你决定,可以是数据库,也可以保存在本地