异常拒绝处理

时间:2009-01-07 14:12:03

标签: c# winforms exception

我尝试了两种捕获意外未处理异常的方法:

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块不存在一样。我一无所知我发生了什么事。任何想法?

编辑:例外情况不是加载

3 个答案:

答案 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#时,问题就消失了。

或许与您的申请案件相同?