2009-01-07 43 views
0

我试图捕捉意想不到的未处理的异常的方法有两种:异常拒绝办理

static void Main() 
     { 
      AppDomain.CurrentDomain.UnhandledException += 
       new UnhandledExceptionEventHandler(ErrorHandler.HandleException); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      try 
      { 
       Application.Run(new OCR()); 
      } 
      catch (Exception ex) 
      { 
       ErrorWindow errorWindow = new ErrorWindow(ex); 
       errorWindow.ShowDialog(); 
       Application.Exit(); 
      } 
     } 

当我使用Visual Studio中执行应用程序,一切工作正常。如果我在bin \ Debug文件夹中使用exe文件,则不处理异常。应用程序的行为就像catch块不在那里一样。我无能为力。有任何想法吗?

编辑:抗辩NIS在负载不thron

+0

也许更具体一点,它可能是有用的例外。 – GWLlosa 2009-01-07 14:33:33

回答

2

我应该处理System.Windows.Forms.Application.ThreadException - 然后它工作。

+0

仍然不知道try catch块有什么问题,但至少该处理程序工作正常。 – agnieszka 2009-01-07 14:45:12

4

我认为你有你的窗体的方法OnLoadLoad事件异常,那么。这是一个臭名昭着的问题,IDE没有帮助它使其行为有所不同。基本上,你需要确保你的OnLoad/Load不会抛出......也许把catch放在那里,然后设置一个你可以检查的属性?

+0

好吧,这是真的!我确实把它放在负载看看会发生什么。但在此之前,我有一个异常在代码的不同部分抛出,加载后很长时间。我没有try catch块,但是有一个UnhandledException处理程序,它也没有被触发。 – agnieszka 2009-01-07 14:17:13

0

我在处理J#代码时遇到了一个有趣的问题。

假设抛出的异常类型为FreakyException。现在,FreakyException继承自FreakyExceptionBase类,后者继而从Exception类继承。诀窍是它们中的每一个都是在它们自己的程序集中定义的。说,FreakyExceptionBase驻留在ExceptionBases.dll,但FreakyException本身驻留在Worker.dll。您的应用程序仅引用Worker.dll,但不引用ExceptionBases.dll

在这种情况下,您catch(Exception)不会赶上FreakyException因为.NET将无法弄清楚,指定FreakyException实际上继承形式Exception继承链。

这发生在J#代码中,因为J#异常继承自java.lang.exception,并且我的项目没有引用J#库。当引用J#时,问题就消失了。

也许这与你的应用程序是一样的情况?

+0

不是因为我在抛出ArgumentException,而是从确实继承了system.exception。 很高兴知道你写的是什么。 – agnieszka 2009-01-07 14:44:30

相关问题