程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#捕獲控制台(console)關閉事件

C#捕獲控制台(console)關閉事件

編輯:關於C#

有時,公司內部自己開發的控制台(console)應用程序在服務器上運行會因為遇到某些異常自動關閉了,這就需要用某機制來捕獲控制台(console)關閉事件,把這樣寫日志,便於維護和調試。

源碼如下:

程序代碼

Code

1using System;
2using System.Runtime.InteropServices;
3using System.Threading;
4using System.Diagnostics;
5
6namespace xmlpusher
7{
8  public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
9  /**////  <summary>
10  ///  Class1  的摘要說明。
11  ///  </summary>
12  class Class1
13  {
14    //The  SetConsoleCtrlHandler  function  adds  or  removes  an  application-defined  HandlerRoutine  function  
15    //from  the  list  of  handler  functions  for  the  calling  process.
16    [DllImport("kernel32.dll")]
17    private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
18    //一個Ctrl  +  C的信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent  函數
19    private const int CTRL_C_EVENT = 0;
20    //一個  Ctrl  +  Break  信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent  函數
21    private const int CTRL_BREAK_EVENT = 1;
22    //當用戶系統關閉Console時,系統會發送此信號到此 
23    private const int CTRL_CLOSE_EVENT = 2;
24    //當用戶退出系統時系統會發送這個信號給所有的Console程序。該信號不能顯示是哪個用戶退出。
25    private const int CTRL_LOGOFF_EVENT = 5;
26    //當系統將要關閉時會發送此信號到所有Console程序
27    private const int CTRL_SHUTDOWN_EVENT = 6;
28    /**////  <summary>
29    ///  應用程序的主入口點。
30    ///  </summary>
31    [STAThread]
32    static void Main(string[] args)
33    {
34      //
35      //  TODO:  在此處添加代碼以啟動應用程序
36      //
37      Class1 cl = new Class1();
38    }
39
40    public Class1()
41    {
42      ConsoleCtrlDelegate newDategate = new ConsoleCtrlDelegate(HandlerRoutine);
43      bool re = SetConsoleCtrlHandler(newDategate, true);
44      if (re)
45      {
46        Console.WriteLine("Set  SetConsoleCtrlHandler  success!!");
47      }
48      else
49      {
50        Debug.WriteLine("Set  SetConsoleCtrlHandler  Error!!");
51        AsReportFile.WriteFile("","test.txt","who close?");
52      }
53      Console.ReadLine();
54    }
55
56    bool HandlerRoutine(int CtrlType)
57    {
58      switch (CtrlType)
59      {
60        case CTRL_CLOSE_EVENT:
61          for (int i = 0; i < 100; i++)
62          {
63            Console.WriteLine("i  is:{0}", i);
64            Thread.Sleep(1000);
65          }
66          break;
67      }
68      return false;
69    }
70  }
71}
72
73

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved