C#,WPF:处理列表视图中的每个元素

时间:2011-06-02 02:08:00

标签: c# wpf

我有一个带有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)这个上下文?程序应该一直运行,直到按下“停止”按钮或其他东西。

1 个答案:

答案 0 :(得分:1)

如果您需要有关线程模型的信息,请参阅respective MSDN page

由于您有一个可观察的集合,您可以处理CollectionChanged事件,您可以看到是否已添加或删除了项目,因此您可以添加或删除工作队列中的项目,您可以从中取出项目,直到它为空(while - 环)。

要从后台线程更改UI-Elements,您需要使用Dispatcher,请参阅我提供的线程模型链接,以获取有关该主题的帮助。