20

我正在使用 VSTS 2008 + .Net 3.5 + C# 来开发 Windows 窗体应用程序。我的困惑是,似乎 Application.Exit 不会强制应用程序终止?如果不是,我应该调用哪种方法来终止应用程序?

编辑1:

通常main方法是这样的,不调用Environment.Exit如何优雅退出Main函数?

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        try
        {
            Application.Run(new Form1());
        }
        catch (Exception ex)
        {
            Console.WriteLine (ex.Message);
        }
    }

提前谢谢,乔治

4

6 回答 6

37

Application.Exit真的只是非常温和地询问消息循环。

如果您希望您的应用程序退出,最好的方法是优雅地退出Main,并干净地关闭任何其他非后台线程。

如果你想变得残忍……Environment.Exit或者Environment.FailFast请注意,这很苛刻——与杀死自己的人差不多Process

于 2009-06-29T08:21:39.110 回答
17

尝试以下操作:

Process.GetCurrentProcess().Kill();

Environment.Exit不适用于 Winforms 并Environment.FailFast引发自己的异常。

于 2013-05-15T16:27:53.633 回答
4

如果您的应用程序在您调用时没有正常退出,那么Application.Exit(显然)有一些东西会阻止它这样做。这可以是任何东西,从事件e.Cancel = true中的表单设置FormClosing到不是仍在运行的后台线程的线程。我建议您仔细研究使您的流程保持活力的确切原因,并以一种好的方式关闭它。这也应该使您的应用程序也能很好地关闭。

通常,在 winforms 应用程序中,关闭主窗体就足够了。

于 2009-06-29T08:29:23.743 回答
3

我用

if (System.Windows.Forms.Application.MessageLoop)
{
   // Use this since we are a WinForms app
   System.Windows.Forms.Application.Exit();
}
else
{
   // Use this since we are a console app
   System.Environment.Exit(1);
}

来自http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

于 2009-06-29T11:07:47.497 回答
1

当我发现在程序中打开一个新表单/窗口时,我遇到了同样的问题,并且只有隐藏第二个表单(而不是关闭它)会阻止主表单通过 Application.Exit(); 正确退出;

在这种情况下有两种解决方案。首先是在主窗体上简单地使用 Close() 而不是 Application.Exit()。第二种解决方案是使用以下代码:

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();
于 2012-12-24T15:36:55.137 回答
-1

我发现您需要做的只是执行 application.exit 并且您只需将其放入 End 就足够了 End 命令将其关闭

于 2015-06-19T17:30:24.153 回答