如何使用Application.线程退出在非windowsforms应用程序?(多线程应用,需要用事件检查主线程)

本文关键字:线程 应用 事件 检查 多线程 退出 Application 何使用 应用程序 windowsforms | 更新日期: 2023-09-27 18:13:57

我的应用程序需要知道主线程何时结束,我发现Application.ThreadExit处理程序。然而我不知道如何使用它。所有的例子都是Application.ThreadExit += new EventHandler(AppEvents.OnThreadExit);。但这是针对Windows窗体的,我的应用程序是一个控制台应用程序。谢谢你!

如何使用Application.线程退出在非windowsforms应用程序?(多线程应用,需要用事件检查主线程)

在控制台中,我总是使用SetConsoleCtrlHandler委托,带有DllImport

在类声明之后,使用:

  private delegate bool ConsoleEventDelegate(int eventType);
        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add);

然后在program中设置处理程序:

var handler = new ConsoleEventDelegate(ConsoleEventCallback);
             SetConsoleCtrlHandler(handler, true);
static bool ConsoleEventCallback(int eventType)
{
    if (eventType == 2)
    {
        //Main thread Console is being closed!
       // handle other threads
    }
    Thread.Sleep(5000);
    return false;
}

您也可以为控制台编写如下代码:-

Application.ThreadExit += new EventHandler(OnThreadExit);

将订阅事件,这意味着每当线程退出时,它将调用OnThreadExit方法,如下所示:-

public static void OnThreadExit(object sender, EventArgs e) 
{
        Console.WriteLine("thread is shutting down.");
}