Application.Exit()不起作用

时间:2011-05-13 11:33:54

标签: c# .net

static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Exit();
            Application.Run(new Form1());
        }

为什么在调用Application.Exit()之后,应用程序不会立即退出?在这一行之后,Form1仍然显示。如何立即退出申请。感谢。

* 注意: *这只是一个例子。我在显示表单之前处理了一些函数。在函数中,我有一个命令代码来调用Application.Exit(),但我想知道为什么应用程序不会立即退出。

我正在使用.NET Framework 4.0

7 个答案:

答案 0 :(得分:35)

逻辑上它无法正常工作。如果Application未运行,则Environment.Exit无法退出。

最好在这里使用{{1}}。

答案 1 :(得分:21)

Application.Exit说:

  

通知所有消息泵必须终止,然后在处理完消息后关闭所有应用程序窗口。

问题是您的应用程序的消息泵在您调用Run并创建表单之前不会启动。

  

Exit方法通常在消息循环中调用,并强制Run返回。

答案 2 :(得分:11)

Application.Exit是关闭程序的“好方法”。处理未完成的Windows消息,然后才关闭所有窗口。这也意味着Application.Exit仅在Windows消息循环运行时有意义,即程序在Application.Run内时。您在Application.Exit之前调用Application.Run,因此没有消息循环退出。

来自文档:

  

通知所有消息泵他们   必须终止,然后关闭所有   消息后的应用程序窗口   已被处理。

您正在寻找的可能是System.Environment.Exit,这或多或少会杀死这个过程。 Environment.Exit仍在做一些清理工作。如果您需要立即终止该过程,可以使用System.Environment.FailFast

答案 3 :(得分:5)

添加return;语句,而不是Application.Exit();

答案 4 :(得分:2)

此时应用程序甚至没有运行。调用退出无效。在您要返回的主要功能中。像这样:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        return;
        Application.Run(new Form1());
    }

答案 5 :(得分:1)

根据MSDN,Application.Exit()

  

通知所有消息泵必须终止,然后在处理完消息后关闭所有应用程序窗口。

由于还没有应用程序窗口,没有任何反应(据我所知)。然后你启动应用程序,因为Application.Exit()没有像你认为的那样停止程序执行。

我认为你的问题实际上并不像你在问题中所描述的那么简单 - 无论如何只是简单return;而没有调用Application.Run()可能是解决方案。

答案 6 :(得分:1)

以下代码可以为您提供帮助。

        if (Application.MessageLoop)
            Application.Exit();
        else
            Environment.Exit(1);