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

30 浏览
0 Comments

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

我有一个用C#编写的已发布的应用程序。每当我点击红色退出按钮关闭主窗体时,窗体关闭但整个应用程序并没有关闭。后来我尝试关机时,接连不断地弹出了很多我添加的MessageBox警告的子窗口。

我尝试了Application.Exit,但它仍会调用所有的子窗口和警告。我不知道如何使用Environment.Exit,也不知道要放入什么整数。

此外,每当我的窗体调用FormClosedFormClosing事件时,我用this.Hide()函数来关闭应用程序;这会影响我的应用程序行为吗?

0
0 Comments

IsBackground设置为false时,程序将一直保持运行直到线程完成,如果将IsBackground设置为true,线程将不会保持程序运行。像BackgroundWorkerThreadPoolTask这样的东西都在内部使用IsBackground设置为true的线程。

对于以上代码中的问题,出现的原因是在主方法中创建了一个非后台线程thread.IsBackground = false;,导致程序无法正常退出。要解决此问题,只需将IsBackground设置为true即可。以下是修改后的代码:

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 = true;
            thread.Start();
            Application.Run(new Form());
        }
        public static void BusyWorkThread()
        {
            while (true)
            {
                Thread.Sleep(1000);
            }
        }
    }
}

0
0 Comments

问题的原因是,当在C#应用程序中的主窗体关闭时,如果使用this.Hide()函数来隐藏窗体,而不是直接关闭窗体,会导致整个应用程序没有正确退出。

解决方法是,如果希望整个应用程序在主窗体关闭时完全终止,应该移除关闭事件处理程序。取消该事件并允许用户关闭窗体,将会得到期望的行为。至于其他窗体,如果不打算再次显示同一实例的窗体,可以直接关闭而不是阻止关闭并隐藏它们。如果要再次显示它们,隐藏它们可能是可以的。

如果希望用户在主窗体上点击"x"按钮时仍然保持其他窗体打开并成为"新的"主窗体,那么情况就会更复杂。在这种情况下,您需要隐藏主窗体而不是关闭它,但是您需要添加一些机制,以在真正需要结束应用程序时实际关闭主窗体。如果您遇到这种情况,请在问题中添加更多详细信息,描述哪些类型的应用程序应该和不应该真正结束程序。

0
0 Comments

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

在C#开发中,我们经常需要退出应用程序。根据不同的应用程序类型,我们可以使用不同的方法来实现这个目标。

对于WinForms应用程序,我们可以使用System.Windows.Forms.Application.Exit方法来退出应用程序。这个方法通知所有的消息泵停止运行,并在处理完所有消息后关闭应用程序的所有窗口。

对于控制台应用程序,我们可以使用System.Environment.Exit方法来退出应用程序。这个方法会终止当前进程并给操作系统指定一个退出代码。

在这里,我们可以通过检查System.Windows.Forms.Application.MessageLoop属性来确定是否调用了System.Windows.Forms.Application.Run方法。如果为真,则说明调用了Run方法,可以假设是一个WinForms应用程序正在执行。根据不同的情况,我们可以选择调用System.Windows.Forms.Application.Exit方法或System.Environment.Exit方法来退出应用程序。

这个问题的回答中还提到了一个有用的提示,即在退出应用程序时,可以通过指定退出代码来传递应用程序特定的错误代码。通常情况下,退出代码为0表示正常退出,非0值表示应用程序特定的错误代码。对于命令行工具来说,这一点尤其重要。

总结起来,对于WinForms应用程序,我们可以使用System.Windows.Forms.Application.Exit方法来退出应用程序,而对于控制台应用程序,我们可以使用System.Environment.Exit方法来退出应用程序。在退出应用程序时,可以选择指定退出代码来传递应用程序特定的错误代码。

希望这篇文章能帮助你正确地退出C#应用程序。

0