While循环或For循环不会退出

时间:2019-01-31 03:39:23

标签: c# while-loop

我正在尝试创建一个线程并将其添加到线程列表中:

int j = 0;
while(j!=6)
    {
        Thread th = new Thread(() => SaveImages(L104List[j], folderFilePath, bw));
        ThreadList.Add(th);
        j++;
        //th.Start();
     }

,但是当 j 变为6时它不会退出。因此它会引发s异常:

  

其他信息:索引超出范围。必须为非负数,并且小于集合的大小。

但是,每当我尝试使用断点手动迭代循环时,它都会退出并转到下一个代码语句。为什么这样做?

PS。我还尝试了for循环,它也做到了。

2 个答案:

答案 0 :(得分:3)

Hrmm

  • 首先,您的关闭会遇到捕获问题。

  • 您的while循环似乎是forforeach循环的完美案例

  • 对于您需要为此使用Thread类还是让我感到满意,如果您这样做的话,那将是最佳选择。为什么不改用Task

  • 更进一步,为什么不让 TPL 为您完成艰苦的工作

简单并行性示例

Parallel.ForEach(L104List, (item) => SaveImages(item, folderFilePath, bw));

优点是

  • 您不会遇到循环变量问题的结束
  • 当cpus重载时,您不必担心低效的线程切换
  • 任务调度程序将以比运行数组所拥有的线程数更多效率的方式从线程池中分出线程。
  • 它会等到您完成所有工作
  • 其一行代码且更易于理解

其他说明,如果可以使方法异步,则可能会获得更高的效率


Parallel.ForEach Method

  

执行一个foreach(在Visual Basic中为For Each)操作,其中   迭代可以并行运行。

答案 1 :(得分:1)

我会做这样的事情:

foreach(var data in L104List)
{
   string local = data;
   ThreadStart work = delegate { SaveImages(local, folderFilePath, bw); };
   new Thread(work).Start();
}