此代码将向您展示我如何启动多个线程:
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);
}
现在我试图在关闭我的应用程序之前停止线程,但我不知道该怎么做?
答案 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()
或其他同步方法同步线程。