我正在尝试创建一个线程并将其添加到线程列表中:
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循环,它也做到了。
答案 0 :(得分:3)
Hrmm
首先,您的关闭会遇到捕获问题。
您的while
循环似乎是for
或foreach
循环的完美案例
对于您需要为此使用Thread
类还是让我感到满意,如果您这样做的话,那将是最佳选择。为什么不改用Task
。
更进一步,为什么不让 TPL 为您完成艰苦的工作
简单并行性示例
Parallel.ForEach(L104List, (item) => SaveImages(item, folderFilePath, bw));
优点是
其他说明,如果可以使方法异步,则可能会获得更高的效率
执行一个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();
}