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

发布于 2024-11-03 17:15:13 字数 267 浏览 1 评论 0原文

我正在获取项目列表并将它们放入 ListView 中。该列表可能很广泛,因此我使用 Parallel.ForEach() 来处理 ListObjects 的构造。

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

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

I am getting a list of items and putting them in a ListView. This list can be extensive so I use a Parallel.ForEach() to deal with the construction of the ListObjects.

After each item is instantiated I fire an event on the UI thread to add the item to the ListView. My logging is indicating to me that the events are waiting until the parallel tasks are completed before proceeding with the AddItem event. This doesn't help me. I need the display to update as quickly as possible but if it's waiting on an event anyway why run parallel?

Should I not use events for this? Would this be better served by creating a delegate to hold the UI callback method and use that instead?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

揽清风入怀 2024-11-10 17:15:13

是的,Parallel.ForEach() 的目的是提高填充 ListView 的完成时间。但仍然需要等待ListView完全加载后才能显示。

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

Yeah, the purpose of the Parallel.ForEach() is to improve the completion time for populating the ListView. But you still have to wait for the ListView to completely load before you can display it.

If you want something that you can view while it is populating, you might try an ObservableCollection. But you should be cautious; the resulting UI activity might drag down the performance of your application.

有木有妳兜一样 2024-11-10 17:15:13

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

我找到了我要找的东西。它是一个 Virtual ListView,又名 VirtualMode 中的 ListView。

请参阅此处:

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

This is not an answer to your question, but it is what I think may be an improved way to get the results you want.

I found the thing I was looking for. It's a Virtual ListView, aka a ListView in VirtualMode.

See here:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文