2009-02-10 174 views
3

我知道GUI有覆盖控制台关闭

private void Form1_Closing(object sender, System.ComponentModel.EventArgs e) 
{ 
    //do stuff 
}
但是我怎么能在控制台应用程序中做同样的事情? 。

C#/ NET3.5

回答

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); 
+0

我在哪里可以阅读更多关于这个?我完全不知道如何使用它。 – Dacto 2009-02-10 08:09:47