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

时间:2012-05-14 17:49:51

标签: c# .net multithreading for-loop

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

这将等待所有线程在应用程序终止之前完成。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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

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