【问题标题】:Do not see MessageBox看不到消息框
【发布时间】:2011-04-13 16:01:56
【问题描述】:

为什么我通过在bin调试文件夹中执行exe正常运行程序时看不到带有异常详细信息的MessageBox?

当我从 Visual Studio 调试(运行)程序时,我确实看到了异常。

[STAThread]
static void Main()
{
    try
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    catch (Exception ex)
    {
        if (MessageBox.Show(
            string.Format("There were unhandeled exceptions. Would you like to continue using this program?"),
            "Fatal Error",
            MessageBoxButtons.YesNo,
            MessageBoxIcon.Error) == System.Windows.Forms.DialogResult.No)
                Application.Exit();
    }
}

编辑
下面是产生异常的代码:

private void button1_Click(object sender, EventArgs e) {
    int num = 1;
    num = num / (num - num);
}

【问题讨论】:

  • 奇怪,当我测试这个时,我确实看到了消息框......
  • “有未处理的异常。是/否?”如果我看到一个,即将每天的 WTF...
  • 即使您回答“否”,程序也会在您的示例中退出。你想达到什么目的?如果您想处理未处理的异常并且不一定要退出程序,还有其他方法可以做到这一点。此外,是否从线程(BackgroundWorker、BeginInvoke、Thread、Task 等)抛出异常?
  • @Joachim 您是否尝试在调用 Application.Run 之前抛出异常?
  • 能否贴出引发异常的代码,以及如何调用该代码?

标签: c# .net winforms exception-handling messagebox


【解决方案1】:

添加这一行:

try 
{
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
    ...

显然调试时默认是不同的。我不知道这方面的细节。

另请注意,您的if(...) Application.Exit(); 在这里并不是很有用,也不应该。
不要尝试重新启动或任何东西。

【讨论】:

  • +1,这是正确的。附加调试器时,消息循环的行为不同。使调试异常变得容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多