C#控制台应用程序-如何判断应用程序何时关闭?
所以我有一个程序,在退出之前需要做一些清理,即使是强制退出。我知道,按下电源按钮是一种强制退出,无法进行清理,但这也会导致其他更大的问题 该程序将挂钩到多个事件中以进行清理。我的问题是,当在调试模式下编译时,它不能正常工作,当在发布模式下编译并从VS(F5)中运行时,它也不能正常工作。在发布模式下,从控制台或文件管理器运行,所有操作都按预期进行 当尝试调试应用程序时,如果触发了处理程序例程,我会看到一个不错的对话框,说vshost失败了,正在寻找问题的解决方案 要使此代码在调试和发布模式下工作,我必须做些什么 编辑 错误: 具体步骤如下: 1) 按F5 2) 等一下 3) 单击控制台窗口中的[X] 4) 错误,请参见上面的链接图像C#控制台应用程序-如何判断应用程序何时关闭?,c#,console,exit,C#,Console,Exit,所以我有一个程序,在退出之前需要做一些清理,即使是强制退出。我知道,按下电源按钮是一种强制退出,无法进行清理,但这也会导致其他更大的问题 该程序将挂钩到多个事件中以进行清理。我的问题是,当在调试模式下编译时,它不能正常工作,当在发布模式下编译并从VS(F5)中运行时,它也不能正常工作。在发布模式下,从控制台或文件管理器运行,所有操作都按预期进行 当尝试调试应用程序时,如果触发了处理程序例程,我会看到一个不错的对话框,说vshost失败了,正在寻找问题的解决方案 要使此代码在调试和发布模式下工作,
class Program
{
public enum CtrlTypes
{
CTRL_C_EVENT = 0,
CTRL_BREAK_EVENT,
CTRL_CLOSE_EVENT,
CTRL_LOGOFF_EVENT = 5,
CTRL_SHUTDOWN_EVENT
}
static string conDB = "";
[DllImport("Kernel32")]
public static extern bool SetConsoleCtrlHandler(HandlerRoutine Handler, bool Add);
public delegate bool HandlerRoutine(CtrlTypes CtrlType);
private static bool ConsoleCtrlCheck(CtrlTypes ctrlType)
{
DatabaseAccess db = DatabaseAccess.Instance; //Issues Here
// Cleanup code removed
return true;
}
public static void ExitProcess(object sender, EventArgs args)
{
#if DEBUG
Debug("\n\n\nDebug Mode\nPress any key to continue...\n");
Console.ReadKey(true);
#endif
}
static int Main(string[] args)
{
SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true);
AppDomain.CurrentDomain.ProcessExit += ExitProcess;
// App code removed
return 0;
} // End main
static void Debug(string text)
{
#if DEBUG
Console.WriteLine(text);
#endif
}
}
可能重复:不完全重复的可能重复。。这是一个C#控制台,你期望的行为是什么,你实际得到的是什么?我在VS中尝试了调试版本中的代码,但没有发现任何问题。@SwDevMan81:您指的是哪条注释?