c# Windows 窗体应用程序异常未抛出!

标签 c# .net visual-studio

我有一个奇怪的问题,如果有人能提供帮助,我将不胜感激。

我有以下功能:

void Foo()
{
    MessageBox.Show("here");
    throw new Exception();
}

我在以下两种情况下调用它(分别 - 不是同时):

private void Form2_Load(object sender, EventArgs e)
{
     // Case 1
     Foo();
}

public Form2()
{
    InitializeComponent();

    // Case 2
    Foo();
}

在这两种情况下我都可以看到消息框(我在“此处”收到消息)但是:

[案例 1] 应用程序没有因异常而中断(在 Debug模式下)并保持沉默!

[案例 2] 应用程序正确中断,我可以看到 Foo() 中存在异常。

知道为什么吗?

最佳答案

我的猜测是对构造函数的调用看起来有点像这样:

Form2 form = new Form2();
Application.Run(form);

关键部分是您直接调用 Form2 的构造函数,而调用 Form2_Load 的是应用程序类/消息泵。

最后一个难题是,在 Win32 消息泵中抛出的异常的处理方式不同(首先请参阅 Application.SetUnhandledExceptionMode Method )- 您可能还会感到困惑的是,根据项目是否不同,异常处理方式也不同是否在调试配置中构建。

您可能有一个 Application.UnhandledException Event 的处理程序- 这将解释您所描述的行为。

关于c# Windows 窗体应用程序异常未抛出!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536973/

相关文章:

java - ASP MVC5 UserManager 添加方法

c# - 为什么在路径中找不到异常 SignTool.exe?

java - 字符串到字符数组在 Visual Studio 和 Android Studio 中返回不同的结果

c# - C# MSVS 中的资源

c# - 从 Emgu 2 升级到 Emgu 3.1.0.1 后随机出现 Emgu AccessViolationException

c# - 文本框验证是否允许一个“。 ”值C#

c# - "Script-Migration"可以在 .NET Entity Framework Core 中创建数据库吗?

c# - Visual Studio 201 7's "Implement Interface”命令可以生成 C# 5 代码吗?

sql-server - 将程序集添加到缓存 : This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded 失败

c# - 如何声明具有匿名类型的字段 (C#)