C#控制檯程序中處理2個關閉事件的代碼實例

咱們開發的控制檯應用,在運行階段頗有可能被用戶Ctrl+C終止或是被用戶直接關閉。若是咱們不但願用戶經過Ctrl+C終止咱們的程序,就須要對Ctrl+C或關閉事件做處理。函數

處理方法工具

在.net平臺下Console類有個CancelKeyPress事件能夠處理Ctrl+C,不過對於直接關閉控制檯應用,這種處理就無能爲力了。spa

不過Windows API中有個SetConsoleCtrlHandler函數能夠處理這兩種關閉事件。.net

C#處理代碼以下:code

導入命名空間blog

using System.Runtime.InteropServices;事件

處理方法ci

在.net平臺下Console類有個CancelKeyPress事件能夠處理Ctrl+C,不過對於直接關閉控制檯應用,這種處理就無能爲力了。開發

不過Windows API中有個SetConsoleCtrlHandler函數能夠處理這兩種關閉事件。string

C#處理代碼以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
static  class  Program
{
     public  delegate  bool  ControlCtrlDelegate( int  CtrlType);
     [DllImport( "kernel32.dll" )]
     private  static  extern  bool  SetConsoleCtrlHandler(ControlCtrlDelegate HandlerRoutine,  bool  Add);
     private  static  ControlCtrlDelegate cancelHandler =  new  ControlCtrlDelegate(HandlerRoutine);
 
     public  static  bool  HandlerRoutine( int  CtrlType)
     {
         switch  (CtrlType)
         {
             case  0:
                 Console.WriteLine( "0工具被強制關閉" );  //Ctrl+C關閉
                 break ;
             case  2:
                 Console.WriteLine( "2工具被強制關閉" ); //按控制檯關閉按鈕關閉
                 break ;
         }
         Console.ReadLine();
         return  false ;
     }
 
     /// <summary>
     /// 應用程序的主入口點。
     /// </summary>
     [STAThread]
     static  void  Main( string [] args)
     {
         SetConsoleCtrlHandler(cancelHandler,  true );
         Console.ReadLine();
     }
}
相關文章
相關標籤/搜索