我尝试了两种捕获意外未处理异常的方法:
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块不存在一样。我一无所知我发生了什么事。任何想法?
编辑:例外情况不是加载
答案 0 :(得分:4)
我认为您在表单的OnLoad
方法或Load
事件中有例外情况。这是一个臭名昭着的问题,IDE没有帮助它使其表现不同。基本上,您需要确保OnLoad
/ Load
不要扔...可能会将catch
放在那里,然后设置一个您可以检查的属性?
答案 1 :(得分:2)
我应该处理System.Windows.Forms.Application.ThreadException - 然后它可以工作。
答案 2 :(得分: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#时,问题就消失了。
或许与您的申请案件相同?