当前位置: 首页 > 编程笔记 >

C#控制台程序中处理2个关闭事件的代码实例

印振国
2023-03-14
本文向大家介绍C#控制台程序中处理2个关闭事件的代码实例,包括了C#控制台程序中处理2个关闭事件的代码实例的使用技巧和注意事项,需要的朋友参考一下

应用场景

我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭。如果我们不希望用户通过Ctrl+C终止我们的程序,就需要对Ctrl+C或关闭事件作处理。

处理方法

在.net平台下Console类有个CancelKeyPress事件可以处理Ctrl+C,不过对于直接关闭控制台应用,这种处理就无能为力了。

不过Windows API中有个SetConsoleCtrlHandler函数可以处理这两种关闭事件。

C#处理代码如下:


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();     } }

 类似资料:
  • 问题内容: 我在JavaFX中有一个舞台,可以通过多种方式关闭该舞台,方法是单击红色(X)或通过一个调用 无论舞台如何关闭,我都希望在舞台关闭之前(或之后)执行操作。 如果我使用以下代码: 然后当我单击(X)时调用处理程序,但当我调用 不同之处在于,他希望在整个应用程序关闭时调用处理程序,因此可以覆盖的方法。但是,我并没有关闭整个应用程序,只是一个阶段。并且没有重写的方法。 谢谢你的帮助。 问题答

  • 问题内容: 我使用Flask作为REST端点,该端点将应用程序请求添加到队列中。然后,该队列被第二个线程使用。 server.py client.py flask中是否有关闭事件处理程序,以便每当烧瓶应用程序关闭时(例如重新启动apache服务时),我就可以干净地关闭使用者线程? 问题答案: 如果你要查找的是没有app.stop(),但是使用模块可以执行类似的操作: https://docs.py

  • 我在JavaFX中有一个阶段,可以通过多种方式关闭,通过单击红色(X)或通过调用的按钮 无论舞台如何关闭,我都想在舞台关闭之前(或关闭时)执行一个动作。 如果我使用以下代码: 然后,当我单击(X)时调用处理程序,但当我调用<code>myStage.close()</code>时不会调用 这与这个问题讨论的问题相同(有一个关键区别):JavaFX:Stage-close-handler 不同之处在

  • 如何在Angular 2中编写窗口关闭事件处理程序,我的意思是关闭而不是刷新。 所以我不能使用

  • 本文向大家介绍C++控制台用定时器实例代码,包括了C++控制台用定时器实例代码的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是C++控制台用定时器的相关实例,具体如下。 Timer在MFC程序中的使用 在MFC中有一个很好用的定时器函数。 使用SetTimer()进行设置定时器 使用KillTimer()关闭定时器 在OnTimer()函数中,响应WM_TIMER这个消息,也就是定时器的

  • 要在控制台应用程序中开始使用Hangfire,您需要首先将Hangfire包安装到控制台应用程序。因此,使用您的软件包管理器控制台窗口进行安装: PM> Install-Package Hangfire.Core 然后添加任务存储安装所需的软件包。例如,使用SQL Server: PM> Install-Package Hangfire.SqlServer 仅需 Hangfire.Core 软件包