AppDomain.UnhandledException可以获的异常,却截不下来,求解

解决方案 »

  1.   

     try
            {        }
            catch (Exception)
            {
                
                throw;
            }
      

  2.   

    普通的TRY应该就可以了吧
      

  3.   

    用最简单的try catch,用except的基类不要用具体异常类
      

  4.   

    Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                      }        void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            {
                if (e.Exception is OutOfMemoryException)
                {//写到日志文件
                }
            }
      

  5.   

    Application.ThreadException
    //只能捕获UI线程的异常,我的异常是自己建立的域中抛出的异常,此事件没有帮助
    AppDomain.UnhandledException
    //这个好像是临死前写下遗言,写完后就死了现在的需求是,我新建域,在域里试着执行代码,如果域里抛出什么异常,不让这些异常影响主进程,直接抛弃域。所以以上两个事件并不能阻止域抛出的异常是主程序崩溃,怎样才能不让域抛出异常呢
      

  6.   

    在.Net1.0/1.1下,非主线程的未处理异常将被忽略。这本身不是好事,所以2.0后该行为更改了。
    像你的情况可以要求程序兼容1.1行为。
    1、添加一个配置文件(App.Config)
    2、加入runtime节并指定legacyUnhandledExceptionPolicy:<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <runtime>
        <legacyUnhandledExceptionPolicy enabled="1"/>
      </runtime>
    </configuration>
    主线程异常就好处理了。注:如果“域里试着执行代码”不用创建线程,则更干净的做法是设定域权限,使他不能创建线程。同样主线程异常很好处理。
      

  7.   

    谢谢gomoku的回复,你的方法很大程度上解决了我的问题你采取的是无视异常的方式,不过这种方式有两个小缺点:运行没问题,但是却很难去调试,因为调试时能检测到异常;在console下,异常依然会显示在黑屏上。不过这都是小问题,不怎么影响运行就行了:)“域里试着执行代码”,代码好多是别人的,很难保证里面不会创建线程,如果加限制可能使代码无法正常运行。微软的机制还不算太全,勉强用吧