【发布时间】:2013-12-14 06:31:54
【问题描述】:
当在 FormClosing 中抛出异常时,我无法通过正常的 try/catch 捕获它 - 为什么不呢?
例子:
public partial class Form2 : Form
{
public Form2() { InitializeComponent(); }
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
throw new Exception("lets catch this");
}
}
我试着像这样抓住它:
try
{
var f = new Form2();
f.ShowDialog();
}
catch (Exception ex)
{
//this is never hit!
MessageBox.Show("try/catch: " + ex);
}
抛出异常,只是从未在我的 try/catch 中捕获。
我可以,但是,使用Application.ThreadException += .. 捕获它,但此时很难恢复。
我能做什么?
另外:
我正在使用 Windows8 x64 - 该程序具有目标平台 x86
我发现了一个与我的here 很接近的问题,但我的异常并没有沉默。
更新 1
当我附加到进程时,它会像我刚刚手动启动 .exe 文件一样失败:
【问题讨论】:
-
程序有时在启动调试 (F5) 和正常启动后由调试器附加 (Ctrl+F5) 时的行为会有所不同。如果附加到进程会发生什么?
-
是模态对话框吗?
-
@helb 是 -
ShowDialog是模态的 -
@Dialectus 它显然抛出了一个未处理的异常......更新我的问题
-
你能在一些 32 位 Windows 上测试这个程序吗?另外,在一些较旧的 Windows 上?如果更改目标平台会发生什么?
标签: winforms visual-studio-2010 c#-4.0 exception-handling