我有一个带有listview控件的WPF应用程序。应用程序基本上将文件加载到列表视图中。然后,我想迭代每个listview元素,突出显示当前行,并执行某个任务。
任务完成后,我会更新另一个文件和一个包含结果的面板,然后转到下一个listview元素。
我以前在WinForms中做过这样的事情,但是在WPF方面我很绿。我想我主要关心的是如何处理第二个线程,而不是UI线程。线程模型在WPF中是否有任何不同?
其次,该程序本质上是一个通过ObservableCollection的循环:
for (int i = 0 ; i < Collection.Count; i++)
{
HighlightCurrentRowInListView();
Collection[i].DoWork();
PostWorkToPanel();
// Bad loop around code
if (i == (Collection.Count - 1))
{ i = -1; }
}
如果我对集合进行了更改(这是一个ObservableCollection),循环将如何更新?什么是最好的迭代方法,foreach,。ForEach(x =&gt; x)这个上下文?程序应该一直运行,直到按下“停止”按钮或其他东西。
答案 0 :(得分:1)
如果您需要有关线程模型的信息,请参阅respective MSDN page。
由于您有一个可观察的集合,您可以处理CollectionChanged
事件,您可以看到是否已添加或删除了项目,因此您可以添加或删除工作队列中的项目,您可以从中取出项目,直到它为空(while
- 环)。
要从后台线程更改UI-Elements,您需要使用Dispatcher
,请参阅我提供的线程模型链接,以获取有关该主题的帮助。