捕获另一个表单抛出的异常

mil*_*ski 7 c# exception winforms

我正在尝试这样做:

我正在创建另一个表单,它的 FormClosed 方法会抛出一个异常,该异常应该由主表单捕获。

主要形式:

try
    {
        frmOptions frm  = new frmOptions();
        frm.ShowDialog();                        
    }
catch(Exception)
    {
        MessageBox.Show("Exception caught.");
    }
Run Code Online (Sandbox Code Playgroud)

选项:

private void frmOptions_FormClosed(object sender, FormClosedEventArgs e)
{
    throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

调试器在出现异常时停止并显示以下消息:

用户代码未处理异常

为什么?我正在捕获创建它的对象的所有者的异常。有人有主意吗?

Gle*_*ven 2

我认为这行不通,新表单没有在上面代码的上下文中运行,它只是由它启动。如果您检查堆栈跟踪中是否有抛出的异常,您不应该在其中看到上面的代码,因此它无法捕获异常。

更新:我刚刚创建了一个测试项目并尝试了它。堆栈跟踪对原始形式一无所知。如果您想捕获未处理的异常,您可能需要查看此问题Unhandled Exception Handler in .NET 1.1