调度员的烦恼,希望有些人知道解决方法。
问题:任何 UI 元素或绑定到它们的任何东西都被强制/必需到 Dispatcher 线程。然后根据操作导致挂起时间。我有一个绑定到 UI 元素的集合,并且操作不能在不同的线程上,因此挂起时间迫在眉睫。
这个问题有什么解决办法吗?
请不要回复Dispatcher.Invoke
或任何相关类型,因为它们不起作用。因为它们是同步的。现在,我真正能做的就是优化操作以尽可能快地进行,但实际上是有限的。
调度员的烦恼,希望有些人知道解决方法。
问题:任何 UI 元素或绑定到它们的任何东西都被强制/必需到 Dispatcher 线程。然后根据操作导致挂起时间。我有一个绑定到 UI 元素的集合,并且操作不能在不同的线程上,因此挂起时间迫在眉睫。
这个问题有什么解决办法吗?
请不要回复Dispatcher.Invoke
或任何相关类型,因为它们不起作用。因为它们是同步的。现在,我真正能做的就是优化操作以尽可能快地进行,但实际上是有限的。
很可能,虽然您正在做的一些工作需要在 UI 线程中进行,但所有工作都不需要。如果要将数据绑定到控件,则应确保数据全部在后台线程中计算,然后在 UI 线程中发生的唯一操作是将已获取/计算的数据应用于控件。例如,如果您正在使用IQueryable
框架并将IQueryable
查询结果绑定为数据源,则该查询的结果实际上还没有被评估;由于尚未迭代结果,因此实际上并未查询数据库。这样做会导致 UI 线程进行数据库调用,这是一件坏事。
如果您实际上拥有如此多的数据,以至于您确实需要很长时间才能更新所有控件,尽管事实上您并没有像我所描述的那样做任何事情,那么您可能需要从根本上重新设计您的应用程序。如果您确实是这种情况,那么您必须将数千行数据绑定到 DataGrid(或类似的东西)。您可能需要对数据进行分页,或者按照这些方式执行其他操作,以确保不会一次将大量数据实际应用于您的控件。您需要找到某种方法将事物分解为更小的数据块,然后显示这些更小的数据块。