Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#控制台应用程序-如何判断应用程序何时关闭?_C#_Console_Exit - Fatal编程技术网

C#控制台应用程序-如何判断应用程序何时关闭?

C#控制台应用程序-如何判断应用程序何时关闭?,c#,console,exit,C#,Console,Exit,所以我有一个程序,在退出之前需要做一些清理,即使是强制退出。我知道,按下电源按钮是一种强制退出,无法进行清理,但这也会导致其他更大的问题 该程序将挂钩到多个事件中以进行清理。我的问题是,当在调试模式下编译时,它不能正常工作,当在发布模式下编译并从VS(F5)中运行时,它也不能正常工作。在发布模式下,从控制台或文件管理器运行,所有操作都按预期进行 当尝试调试应用程序时,如果触发了处理程序例程,我会看到一个不错的对话框,说vshost失败了,正在寻找问题的解决方案 要使此代码在调试和发布模式下工作,

所以我有一个程序,在退出之前需要做一些清理,即使是强制退出。我知道,按下电源按钮是一种强制退出,无法进行清理,但这也会导致其他更大的问题

该程序将挂钩到多个事件中以进行清理。我的问题是,当在调试模式下编译时,它不能正常工作,当在发布模式下编译并从VS(F5)中运行时,它也不能正常工作。在发布模式下,从控制台或文件管理器运行,所有操作都按预期进行

当尝试调试应用程序时,如果触发了处理程序例程,我会看到一个不错的对话框,说vshost失败了,正在寻找问题的解决方案

要使此代码在调试和发布模式下工作,我必须做些什么

编辑

错误:

具体步骤如下: 1) 按F5 2) 等一下 3) 单击控制台窗口中的[X] 4) 错误,请参见上面的链接图像

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:您指的是哪条注释?