只是想知道这个场景的最佳方法是什么 - 尝试数据绑定到正在另一个后台线程中填充的集合。
我的后台主题是在处理循环中将项目添加到集合中,该循环可能会运行几分钟。它偶尔会向UI引发一个事件,并传递对集合中数据的引用,以便UI可视化(因此用户可以开始与他们拥有的内容进行交互)并继续处理。
麻烦是UI开始呈现可视化(这本身就非常复杂),它涉及到数据集合上的foreach()循环,并且可以理解的是,如果我的后台线程在集合期间更改了集合中的数据,那么循环就会自行崩溃枚举。
所以我的头脑风暴就像这样:
欢呼声 尤尔特。
答案 0 :(得分:0)
解决问题的最简单方法是将foreach循环更改为for循环,在开始循环之前,循环从0循环到集合中的项目数。
而不是:
var coll = new List<string>();
foreach (string item in coll)
{
//do your stuff
}
使用:
var coll = new List<string>();
int length = coll.Count - 1;
for (int i = 0; i < length; i++)
{
}
OR
我不知道您的UI有多复杂但是使用WPF几乎总是可以将代码更改为绑定到ObservableCollection的高级数据绑定。添加或删除项目时,Observable集合会触发绑定更新。 但要为此提供解决方案,需要有关如何构建UI的大量信息。