网站排名
RSS订阅 | 匿名投稿
您的位置:网站首页 > 网站优化 > 正文

如何捕捉控制台程序的关闭事件

作者:福州seo推广 来源:seo.838766.com 日期:2013-11-4 12:15:37 人气: 标签:
做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下:
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Diagnostics;
  4. using System.Runtime.InteropServices;
  5. namespace ConsoleColsed
  6. {
  7. public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
  8. public class ClsMain
  9. {
  10. [DllImport("kernel32.dll")]
  11. private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
  12. //当用户关闭Console时,系统会发送次消息
  13. private const int CTRL_CLOSE_EVENT = 2;
  14. [STAThread]
  15. static void Main()
  16. {
  17. ClsMain cls = new ClsMain();
  18. }
  19. public ClsMain()
  20. {
  21. // 用API安装事件处理
  22. ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine);
  23. bool bRet = SetConsoleCtrlHandler(newDelegate, true);
  24. if (bRet == false) //安装事件处理失败
  25. {
  26. Debug.WriteLine("失败");
  27. }
  28. else
  29. {
  30. Console.WriteLine("ok");
  31. Console.Read();
  32. }
  33. }
  34. /// <summary>
  35. /// 处理消息的事件
  36. /// </summary>
  37. private static bool HandlerRoutine(int CtrlType)
  38. {
  39. switch (CtrlType)
  40. {
  41. case CTRL_CLOSE_EVENT: //用户要关闭Console了
  42. Debug.WriteLine("Close");
  43. break;
  44. }
  45. return false;
  46. }
  47. }
  48. }
读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址: