【发布时间】:2011-04-12 23:02:31
【问题描述】:
我有一个关于调度程序和后台工作线程的问题。我有一个系统,我在其中异步处理 HTTP 请求。最终,ObservableCollection 被绑定到 WPF 控件。
我一直在使用 Dispatcher.CurrentDispatcher.CheckAccess() 代替 Silverlight 的 Deployment.Current.Dispatcher.CheckAccess() 来确定我是否在 UI 线程中。但是,查看 Stack Overflow 上的文档和其他问题,WPF 版本似乎只是在需要时创建了一个调度程序。
当前系统在调度线程上使用 CheckAccess 来确定我们是否在 UI 线程上,然后将其传递给在工作线程中运行的处理程序。工作线程上的 CheckAccess 也返回 true,大概是因为它刚刚创建了自己的 Dispatcher。
移动到跨线程可观察集合不是一种选择。另一个问题说我需要维护对 UI 线程调度程序的引用。有什么方法可以使用 Threading 命名空间中的 Dispatcher 类/其他类来确定我是否在 UI 线程中?还是我应该继续使用调度线程的调度程序来运行处理程序,而不管调度线程是否是 UI 线程?
谢谢!
【问题讨论】:
标签: wpf observablecollection dispatcher