C# While循环或For循环不退出
我正在尝试创建一个线程并将其添加到线程列表中:C# While循环或For循环不退出,c#,while-loop,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异常: 附加信息:索引超出范围。必
int j = 0;
while(j!=6)
{
Thread th = new Thread(() => SaveImages(L104List[j], folderFilePath, bw));
ThreadList.Add(th);
j++;
//th.Start();
}
但当j变为6时,它不会退出。因此它抛出了一个s异常:
附加信息:索引超出范围。必须为非负数且小于集合的大小
但是,每当我尝试使用断点手动迭代循环时,它就会退出并转到下一个代码语句。它为什么这样做
另外,我还尝试了for循环,它也做到了。- 首先,您的闭包将出现捕获问题
- 您的
循环似乎是while
或for
循环的完美案例foreach
- 我还不确定您是否需要为此使用
类,或者如果您这样做,它将是最佳的。为什么不改用线程
任务
- 更进一步,为什么不让第三方物流为您做艰苦的工作
Parallel.ForEach(L104List, (item) => SaveImages(item, folderFilePath, bw));
优点是
- 您不会遇到关闭循环变量的问题
- 当CPU过载时,您不必担心线程切换效率低下
- 任务调度器将从线程池中分割线程,其方式很可能比运行数组中所包含的线程数更有效
- 它会一直等到你所有的工作完成
- 这是一行代码,更容易理解
执行foreach(对于Visual Basic中的每个)操作,其中 迭代可以并行运行
- 首先,您的闭包将出现捕获问题
- 您的
循环似乎是while
或for
循环的完美案例foreach
- 我还不确定您是否需要为此使用
类,或者如果您这样做,它将是最佳的。为什么不改用线程
任务
- 更进一步,为什么不让第三方物流为您做艰苦的工作
Parallel.ForEach(L104List, (item) => SaveImages(item, folderFilePath, bw));
优点是
- 您不会遇到关闭循环变量的问题
- 当CPU过载时,您不必担心线程切换效率低下
- 任务调度器将从线程池中分割线程,其方式很可能比运行数组中所包含的线程数更有效
- 它会一直等到你所有的工作完成
- 这是一行代码,更容易理解
执行foreach(对于Visual Basic中的每个)操作,其中 迭代可以并行运行
我会这样做:
foreach(var data in L104List)
{
string local = data;
ThreadStart work = delegate { SaveImages(local, folderFilePath, bw); };
new Thread(work).Start();
}
我会这样做:
foreach(var data in L104List)
{
string local = data;
ThreadStart work = delegate { SaveImages(local, folderFilePath, bw); };
new Thread(work).Start();
}
我猜
L104List
可能少于集合中的6项。@D-Shih它的计数为6,因此如果j给出6,它抛出和异常,因为数组中的第6个数字是5,对吗?为什么不使用L104List.Lenght>j
作为条件?我猜L104List
可能在集合中少于6项。@D-Shih它的计数是6,所以如果j给出6,它抛出和异常,因为数组中的第6个数字是5,对吗?为什么不使用L104List.Lenght>j
作为条件?@TerribleDog如果没有,则在执行并行后,一切都将完成。ForEach
@TerribleDog如果没有,执行Parallel.ForEach