为什么在并行线程完成之后事件才会触发?

时间:2011-04-25 20:17:18

标签: c# .net multithreading events parallel-processing

我得到一个项目列表并将它们放在ListView中。这个列表可以很广泛,所以我使用Parallel.ForEach()来处理ListObjects的构造。

在每个项目实例化后,我在UI线程上触发一个事件,将项目添加到ListView。我的日志记录向我指示事件正在等待,直到并行任务完成,然后才继续使用AddItem事件。这对我没有帮助。我需要显示器尽快更新,但如果它正在等待事件,为什么要并行运行?

我不应该为此使用事件吗?通过创建一个委托来保存UI回调方法并使用它来改善吗?

2 个答案:

答案 0 :(得分:0)

是的,Parallel.ForEach()的目的是改善填充ListView的完成时间。但是你仍然必须等待ListView完全加载才能显示它。

如果您想要在填充时可以查看的内容,可以尝试ObservableCollection。但你应该谨慎;生成的UI活动可能会降低应用程序的性能。

答案 1 :(得分:0)

这不是您问题的答案,但我认为这可能是获得您想要的结果的改进方法。

我发现了我正在寻找的东西。它是一个Virtual ListView,也就是VirtualMode中的ListView。

见这里:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.virtualmode.aspx