关闭 GUI 时终止线程

本文关键字:线程 终止 GUI 关闭 | 更新日期: 2023-09-27 18:36:24

我需要在两到四个不同的服务器上执行一个耗时的任务。

服务器的数量可能会有所不同。

我需要在大致相同的时间在每台机器上执行相同的任务,否则此过程所需的时间会增加四倍。

到目前为止,我已经能够想出这个:

public partial class Form_main : Form
{
    list<string> vms = new list<string>;
    ///Fill in vms...
    private void startTest()
    {
        ///prevents GUI from hanging
        ThreadPool.QueueUserWorkItem(new WaitCallback(runTests));
    }
    pirvate void runTests()
    {
        ///Some setup stuff (~1 min)
        foreach(string vm in vms)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(testProcedure), new object[] {vm});
        }
    }
}

这适用于一次运行所有内容,但问题是,如果 GUI 被杀死,线程不会随之被杀死。我想它正在杀死 runTests 线程,但没有杀死 testProcedure 线程。

我怎样才能使测试过程线程在 GUI 关闭时被杀死?

关闭 GUI 时终止线程

您可以在主窗体的 OnFormClosed 处理程序中调用 Environment.Exit 方法。