Duc*_*tal 3 c# gtk mono multithreading thread-safety
我有一个小应用程序,使用BackgroundWorker来处理IEnumerator<T> list所有时间.
代码基本上是这样的:
while(true){
foreach(T item in list){
// Process each item and send process
// Add an object in child List ( List<T1> item.Result )
}
Thread.Sleep(500);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个按钮和一个文本框,它将直接添加到IEnumerator中.
问题是,在我添加按钮后,后台工作人员继续处理它当前处理的项目,但在完成该项目后将停止.它不会继续下去.
如何安全地将项目添加到列表中而不影响后台工作者?在后台工作者旁边也会添加对象.这应该是什么解决方案?
谢谢
让后台工作程序迭代原始列表的副本,而不是列表本身.
while (true)
{
foreach (T item in new List<T>( list ))
{
....
}
Thread.Sleep(500);
}
Run Code Online (Sandbox Code Playgroud)
如果您在枚举时尝试修改集合,则枚举器将抛出异常.来自文档:
只要集合保持不变,枚举器仍然有效.如果对集合进行了更改,例如添加,修改或删除元素,则枚举数将无法恢复,并且下一次调用MoveNext或Reset会引发InvalidOperationException.如果在MoveNext和Current之间修改了集合,则Current返回它所设置的元素,即使枚举器已经失效.
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |