3

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

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

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

4

3 回答 3

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

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

于 2012-05-14T17:54:56.273 回答
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);
}

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

于 2012-05-14T18:20:03.833 回答
0

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

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

于 2012-05-14T17:54:35.410 回答