我刚刚遇到。net中异常处理的奇怪行为。(我在MS Visual Studio 2008中使用c#,但我在这里看到的一个问题似乎暗示了我所看到的在整个。net世界都是正确的。)我正在写一个普通的WinForm应用程序。我故意导致在任何try块之外的form_load事件处理程序中抛出未处理的异常。我没有收到任何通知。如果在正常方法中发生了未处理的异常,则会弹出一条消息,告诉我发生了异常,并提供有关问题的一些信息。但是在处理程序中,代码只是悄悄地退出函数,而不让任何人知道它发生了。如果我添加一个try/catch块,异常就会被捕获。
这种行为是否发生在所有事件处理程序中?这是预期行为吗?如果是这样,是因为如果事件处理程序意外停止,发生不良事件的危险太大了吗?
无论在VS内部还是外部,当有一个调试器附加到进程时,都会发生此行为。然而,作为调试版本并没有什么区别。如果在VS 外部运行而没有附加调试器,则会触发未处理的异常。你可以检查
为什么表单加载不能捕获异常?,对于64位版本的Windows, VS2010在WinForms应用程序中没有显示未处理的异常消息,为可能的解决方案。
编辑:这个行为只特定于form_load事件处理程序,据我所知。