Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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_Overriding - Fatal编程技术网

C# 超控控制台关闭

C# 超控控制台关闭,c#,console,overriding,C#,Console,Overriding,我知道GUI有 private void Form1_Closing(object sender, System.ComponentModel.EventArgs e) { //do stuff } 但是,在控制台应用程序中如何做同样的事情呢 C#/.NET3.5以下是如何: // Declare the SetConsoleCtrlHandler function // as external and receiving a delegate. [DllImport("Kernel32")

我知道GUI有
private void Form1_Closing(object sender, System.ComponentModel.EventArgs e)
{
  //do stuff
}
但是,在控制台应用程序中如何做同样的事情呢

C#/.NET3.5

以下是如何:

// Declare the SetConsoleCtrlHandler function
// as external and receiving a delegate.
[DllImport("Kernel32")]
public static extern bool SetConsoleCtrlHandler(HandlerRoutine Handler, bool Add);

// A delegate type to be used as the handler routine
// for SetConsoleCtrlHandler.
public delegate bool HandlerRoutine(CtrlTypes CtrlType);

// An enumerated type for the control messages
// sent to the handler routine.
public enum CtrlTypes
{
    CTRL_C_EVENT = 0,
    CTRL_BREAK_EVENT,
    CTRL_CLOSE_EVENT,
    CTRL_LOGOFF_EVENT = 5,
    CTRL_SHUTDOWN_EVENT
}

private static bool ConsoleCtrlCheck(CtrlTypes ctrlType)
{
    // Put your own handler here
    return true;
}

...

SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true);

我在哪里可以读到更多关于这方面的信息?我不完全理解如何使用它。请阅读MSDN上的P/Invoke(或PInvoke)。setConsoletrlHandler()上的文档也在那里。好的,我有点了解,但我仍然不知道如何阻止CTRL\u CLOSE\u事件,我尝试在捕捉到该事件时返回false/true,但没有成功。