【问题标题】:C#, WPF: Do work on each element in a list ViewC#,WPF:对列表视图中的每个元素进行处理
【发布时间】:2011-06-02 10:13:24
【问题描述】:

我有一个带有列表视图控件的 WPF 应用程序。该应用程序基本上将文件加载到列表视图中。然后我想遍历每个 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=>x)?程序应该一直运行,直到按下“停止”按钮或其他东西。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

    由于您有一个可观察的集合,您可以处理CollectionChanged 事件,您可以查看是否已添加或删除项目,以便您可以从工作队列中添加或删除那些您可以从中取出项目直到它为空的项目(@ 987654325@-loop)。

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

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多