Application.Exit() - 关闭表单后应用程序仍在运行

Posted

技术标签:

【中文标题】Application.Exit() - 关闭表单后应用程序仍在运行【英文标题】:Application.Exit() - application still running after closing form 【发布时间】:2012-12-02 16:49:10 【问题描述】:

我有一个游戏应用程序,当游戏窗体关闭时,主菜单总是弹出。因此,当用户关闭主菜单窗体时,所有应用程序都应该停止运行。我正在尝试处理主菜单的 Form_Closed 事件并执行 Application.Exit() 但这似乎不起作用,即使所有表单都已关闭,应用程序仍在运行,我必须手动停止它。

这是我在游戏表单和主菜单表单中关于关闭的代码:

在游戏中:

private void GameForm_FormClosing(object sender, FormClosingEventArgs e)

    DialogResult dialogResult = MessageBox.Show("Are you sure you want to close this game?", "Exit Game", MessageBoxButtons.YesNo);

    if (dialogResult == DialogResult.Yes)
    
        this.Hide();   // hide the Game Form

    
    else if (dialogResult == DialogResult.No)
    
        e.Cancel = true;    // cancel form closure
    



private void GameForm_FormClosed(object sender, FormClosedEventArgs e)

    MainMenu menu = new MainMenu();
    menu.Show();

在主菜单中:

private void MainMenu_FormClosed(object sender, FormClosedEventArgs e)

    Application.Exit();

我是不是做错了什么,还是我应该添加一些东西才能使它起作用?

【问题讨论】:

能否请您提供什么不完全有效? :) 一切正常......即使我关闭表单,应用程序也会继续运行!我必须手动停止它! 【参考方案1】:

你有线程在运行吗?

除非您将它们设置为 "background thread"

,否则您的应用程序不会在所有线程完成之前退出

【讨论】:

不..没有线程在运行..如果我在用户点击关闭时隐藏其他表单是否有什么不同?【参考方案2】:

考虑到您在谈论游戏应用程序,您会使用外部资源或某些游戏引擎。 在退出应用程序之前,请确保您释放/处置/清理您在应用程序中使用的资源。

例如要跟踪打开的句柄可以使用Handle

【讨论】:

我拥有的唯一外部资源是图像......请问我应该如何在表单的 form_closure 事件中处理这些资源? 是的!确保处置从文件中读取的所有图像对象。这绝对是一个原因。 我试过这个:private void MainMenu_FormClosing(object sender, FormClosingEventArgs e) Dispose(); 但仍然:/ 不处理表单,而是处理您在应用程序中创建的任何Image 对象。 哦.. 我无法将它们全部处理掉?我要一一处理掉所有的资源?感谢您抽出时间 Tigran.. 我对这些应用程序还是很陌生!

以上是关于Application.Exit() - 关闭表单后应用程序仍在运行的主要内容,如果未能解决你的问题,请参考以下文章

调用 Application.Exit() 后,应用程序仍在内存中运行

如何正确退出 C# 应用程序?

Application.Exit()结束程序,但线程还在的解决方法。

C# WPF 关闭整个程序

WPF关闭应用程序方法

在winForm中