日期:2014-05-17  浏览次数:20787 次

c# 多线程控制
如下代码:
for (int i = 0; i < n; i++)
{
Thread t = new Thread(new ParameterizedThreadStart(get));
t.Start(i);
}

do();

我希望可以在for循环里的线程全部结束后,执行do()函数,请问,我该怎么控制呢?


------解决方案--------------------
最简单的是用Task的WaitAll
Task<int, int>[] tasks = new Task<int, int>[n];
for (int i = 0; i < n; i++)
{
    tasks[i] = Task.Factory.StartNew(i => { get(i); return 0; });
}
Task.WaitAll(tasks);
------解决方案--------------------
最好还是在线程中检查是否线程都执行完毕,在主线程这么阻塞的UI用户体验不好。
------解决方案--------------------
为什么不把do放在线程的最后面做,

这样线程执行完后,do方法就会被调用。而且也不会影响到界面其它操作.

Task.Factory.StartNew(()=>
{
    for (int i = 0; i < n; i++)
   {
      get(i);
    }
   do();
});