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

我在C#中发布了一个应用程序。 这里的问题是每当我点击红色退出按钮关闭主窗体时,它会关闭窗体,但不会关闭应用程序。 当我尝试关闭计算机时,我发现了这一点,希望我所做的应用程序能够顺利运行,然后我被很多子窗口轰炸,并且我已经放置了MessageBox警报。

我尝试了Application.Exit,但它仍然调用了所有的子窗口和警报,我不知道如何使用Environment.Exit和放入它的整数。 顺便说一句,无论我的表单何时调用formclosed或表单关闭事件,我都使用this.Hide()函数关闭应用程序。 这会影响我的应用程序现在的行为吗?


来自MSDN:

Application.Exit

通知所有消息泵必须终止,然后在消息处理后关闭所有应用程序窗口。 如果您调用了Application.Run(WinForms应用程序),则这是要使用的代码,此方法将停止所有线程上的所有正在运行的消息循环,并关闭应用程序的所有窗口。

Environment.Exit

终止此过程并为底层操作系统提供指定的退出代码。 这是您在使用控制台应用程序时调用的代码。

这篇文章Application.Exit vs. Environment.Exit指出了一个好的提示:

您可以确定是否System.Windows.Forms.Application.Run已被称为检查System.Windows.Forms.Application.MessageLoop财产。 如果为true,则Run已被调用,并且您可以假定WinForms应用程序正在执行,如下所示。

if (System.Windows.Forms.Application.MessageLoop) 
{
    // WinForms app
    System.Windows.Forms.Application.Exit();
}
else
{
    // Console app
    System.Environment.Exit(1);
}

参考:为什么Application.Exit不起作用?


我知道这不是你所遇到的问题,但是另一个可能发生的原因是你的应用程序中有一个非背景线程打开。

using System;
using System.Threading;
using System.Windows.Forms;

namespace Sandbox_Form
{
    static class Program
    {
        private static Thread thread;

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            thread = new Thread(BusyWorkThread);
            thread.IsBackground = false;
            thread.Start();

            Application.Run(new Form());

        }

        public static void BusyWorkThread()
        {
            while (true)
            {
                Thread.Sleep(1000);
            }
        }
    }
}

IsBackgroundfalse它会让程序保持打开状态,直到线程完成,如果将IsBackground设置为true ,线程将不会让程序保持打开状态。 诸如BackgroundWokerThreadPoolTask都在内部使用一个IsBackground设置为true的线程。


所有你需要的是System.Environment.Exit(1);

它使用系统命名空间“using System”,当你开始一个项目时,它总是存在于那里。

链接地址: http://www.djcxy.com/p/50503.html

上一篇: How to properly exit a C# application?

下一篇: WPF or Windows Forms