如何在c#中正确退出/停止/处置控制台应用程序?

本文关键字:停止 控制台 应用程序 退出 | 更新日期: 2023-09-27 18:05:38

我注意到在我的任务管理器我有这个应用程序的几个副本-虽然不占用任何CPU资源。

我知道我一定做错了什么,所以我问大家…

这是经过灭菌的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace AnalyticsAggregator
{
class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        try
        {
            bool onlyInstance = false;
            Mutex mutex = new Mutex(true, "AnalyticsAggregator", out onlyInstance);
            if (!onlyInstance)
            {
                return;
            }
                            "Do stuff with the database"

            GC.KeepAlive(mutex);
        }
        catch (Exception e)
        {
                EventLog eventlog = new EventLog("Application");
                eventlog.Source = "AnalyticsAggregator";
                eventlog.WriteEntry(e.Message, EventLogEntryType.Error);
            }
        }
    }
}
}

我有其他控制台应用程序,不是互斥/单例显示相同的行为,我做错了什么?我假设某种处置方式…

谢谢

如何在c#中正确退出/停止/处置控制台应用程序?

控制台应用程序将在完成后终止,通常在它运行到其Main入口点方法的末尾时终止,尽管您必须小心地摆脱可能一直在管理的任何遗留资源,因为它们可以保持底层进程的活动。

您可以使用Environment.Exit显式退出,也可以使用Application.Exit,尽管从我的经验来看,后者是基于表单的(与清除消息泵和关闭窗口等有关)。

底线是一定要做家务

您可以尝试在Mutex的使用周围添加using语句。例子:

using (Mutex mutex = new Mutex(true, "AnalyticsAggregator", out onlyInstance))
{
    if (!onlyInstance) return;
    ... database stuff ...
}

当花括号内的代码以任何方式(正常执行或异常)退出时,将自动清除Mutex实例。

Application.Exit();

是标准的方法,但是除非你想通过用户输入退出应用程序(例如:你想退出应用程序(y/n)吗?),关闭控制台应该是足够的。