如何在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);
}
}
}
}
}
我有其他控制台应用程序,不是互斥/单例显示相同的行为,我做错了什么?我假设某种处置方式…
谢谢
控制台应用程序将在完成后终止,通常在它运行到其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)吗?),关闭控制台应该是足够的。