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

解决方案 »

  1.   

    try catch并不是为了保护而存在的,是为了你方便的恢复这个异常,如果你不准备恢复这个异常完全没必要哪都加try catch.(包括你准备把这个异常信息写进日志,供以后常看)
      

  2.   

    一般用三层架构
    在业务层和UI层捕捉异常就可以了
    你的情况只能在每个方法加一个
    try 
    {...} 
    catch 
    {...} 
    方法的所有代码都包括在try里
      

  3.   

    那这样就不会有像你所说的try catch太多而不好管理,一层一层的try catch上去 ,已经写过日志的地方没其他会抛异常的操作就不要try catch了
      

  4.   

    csdn都弹"黄白"错误呢,楼主是不是想每个方法体都一开始生成像下面这个样子
    void A()
    {
      throw new xxxException();
    }
    这样是没必要的,因为这样你没办法去关心比较重要的异常
      

  5.   

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

  6.   

    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();
    }
    }
      

  7.   

    using System.Threading;
    Application.ThreadException += getmessage; 
    private static void getmessage(object sender, ThreadExceptionEventArgs e) 
    {
      MessageBox.Show(e.Exception.Message);
    }