c# - 绑定(bind)到 UI 的调度程序和集合

标签 c# wpf multithreading dispatcher

调度员的烦恼,希望有些人知道解决方法。

问题:
任何 UI 元素或绑定(bind)到它们的任何东西都是 强制/必填 到 Dispatcher 线程上。
然后根据操作导致挂起时间。
我有一个绑定(bind)到 UI 元素的集合,并且操作不能在不同的线程上,因此挂起时间迫在眉睫。

这个问题有什么解决办法吗?

请不要回复 Dispatcher.Invoke或任何相关类型,因为它们不起作用。因为它们是同步的。现在,我真正能做的就是优化操作以尽可能快地进行,但实际上是有限的。

最佳答案

很可能,虽然您正在做的一些工作需要在 UI 线程中进行,但所有工作都不需要。如果要将数据绑定(bind)到控件,则应确保数据全部在后台线程中计算,然后在 UI 线程中发生的唯一操作是将已获取/计算的数据应用于控件。例如,如果您使用 IQueryable框架,然后绑定(bind) IQueryable 的结果查询作为数据源,则该查询的结果尚未实际评估;由于尚未迭代结果,因此实际上并未查询数据库。这样做会导致 UI 线程进行数据库调用,这是一件坏事。在这样的示例中,最好将查询结果拉入一个列表,然后在 UI 线程中绑定(bind)该列表。

如果您实际上拥有如此多的数据,以至于您确实需要很长时间才能更新所有控件,尽管事实上您并没有像我所描述的那样做任何事情,那么您可能需要从根本上重新设计您的应用程序。如果您确实是这种情况,那么您必须将数千行数据绑定(bind)到 DataGrid(或类似的东西)。您可能需要对数据进行分页,或者按照这些方式执行其他操作,以确保不会一次将大量数据实际应用于您的控件。您需要找到某种方法将事物分解为更小的数据 block ,然后显示这些更小的数据 block 。

关于c# - 绑定(bind)到 UI 的调度程序和集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12898343/

相关文章:

c# - 如何在没有登录的情况下对用户进行身份验证

c# - 在 C# 中连接两个具有不同数据类型的字典

c# - Entity Framework - 将组合框绑定(bind)到规范化表字段

java - 从不同线程中的消息循环返回操作结果

Java 线程 : How to print alphabets and numbers using two threads one at a time

c# - LINQ 查询返回第一个结果的多个副本

c# - 通过在 Web 应用程序表单中返回一串数据来测试 Web 服务

WPF MediaElement 白色显示为灰色

wpf - 通过拖动启用 ListView 多选

c# - UDP 绑定(bind)方法