【问题标题】:Why won't Application.Exit() quit a Windows Forms application?为什么 Application.Exit() 不会退出 Windows 窗体应用程序?
【发布时间】:2010-01-28 01:30:10
【问题描述】:

我正在学习使用 C# 的 Windows 窗体,并且有一个简单的应用程序。当用户选择 File->Exit 时,我试图关闭它。我有一个附加的事件处理程序,我尝试调用Application.Exit()Application.ExitThread() 并关闭表单。没有什么。它留在那里。我也没有创建任何其他类型的线程。

想法?谢谢。

【问题讨论】:

  • 可能没有调用事件处理程序。如果你设置一个断点,它会被命中吗?贴一些代码。
  • 当您在表单处于活动状态时按 Alt+F4 时应用程序是否正确终止?

标签: c# windows winforms


【解决方案1】:

您是否尝试在事件处理程序中放置断点以查看它是否被命中?

如果是这样,如果窗口消息没有被传递(即 UI 线程被阻塞),应用程序将不会退出。测试这一点的一种方法是调用Environment.Exit(),这对于强制关闭更为残酷。如果成功,您就可以找出Application.Exit() 不起作用的原因。

【讨论】:

  • VS 中的自动完成把我搞砸了。我正在将委托分配给另一个类似名称的菜单项。
【解决方案2】:

Application.Exit 不是关闭 GUI 应用程序的正常方式。请改用form.Close

  private static void OnMenuClose_Click(object sender, System.EventArgs e)
  {
     Form dlg = ((Control) sender).FindForm();
     //dlg.DialogResult = DialogResult.OK;
     dlg.Close();
  }

【讨论】:

  • 如果您对主窗体执行此操作,则可以。如果所有其他表单都是子表单,它们将被自动销毁。
  • 请注意,使用form.Close() 时,不会调用任何其他打开的表单或对话框上的FormClosing 事件。使用Application.Exit() 时,您可以“中止”来自任何其他表单或对话框的FormClosing 事件的关闭请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
相关资源
最近更新 更多