如何停止多线程启动由 for 循环条件

本文关键字:for 循环 条件 启动 何停止 多线程 | 更新日期: 2023-09-27 18:34:03

这段代码将向您展示我如何启动多个线程:

for (int i = 0; i < 8; i++)
{
    doImages    = new DoImages(this, TCPPORT + i);
    var thread  = new Thread(doImages.ThreadProc);
    thread.Name = "Imaging";
    var param = (i + 1).ToString();                      
    thread.Start(param);
}

现在我正在尝试在关闭应用程序之前停止线程,但我不知道该怎么做?

如何停止多线程启动由 for 循环条件

一个简单的选项是存储对生成的所有线程的引用,然后在完成后加入所有线程:

Thread[] threads = new Thread[8];
for (int i = 0; i < 8; i++)
{
    doImages    = new DoImages(this, TCPPORT + i);
    var thread  = new Thread(doImages.ThreadProc);
    threads[i] = thread;
    thread.Name = "Imaging";
    var param = (i + 1).ToString();                    
    thread.Start(param);
}
for (int i = 0; i < 8; i++)
{
    threads[i].Join();
}

这将等待所有线程完成,然后再终止应用程序。

最干净和最可靠的方法是使它们 后台线程:

for (int i = 0; i < 8; i++)
{
    doImages    = new DoImages(this, TCPPORT + i);
    var thread  = new Thread(doImages.ThreadProc);
    thread.Name = "Imaging";
    var param = (i + 1).ToString();  
    thread.IsBackground = true;          // **
    thread.Start(param);
}

当进程(主线程(退出时,后台线程会自动终止。

如果您保留对线程对象的引用并且只想退出应用程序,则可以使用 thread.Abort();

我的猜测是您想完成执行然后关闭应用程序。为此,您需要使用Join()或其他同步方法同步线程。