Wpf 调度程序和工作线程

Wpf 调度程序和工作线程,wpf,observablecollection,dispatcher,Wpf,Observablecollection,Dispatcher,我有一个关于调度程序和后台工作线程的问题。我有一个异步处理HTTP请求的系统。最终,ObservableCollection绑定到WPF控件 我一直在使用Dispatcher.CurrentDispatcher.CheckAccess()代替Silverlight的Deployment.Current.Dispatcher.CheckAccess()来确定我是否在UI线程中。然而,看看这里关于堆栈溢出的文档和其他问题,似乎WPF版本只是在需要时创建了一个调度程序 当前系统在调度线程上使用Chec

我有一个关于调度程序和后台工作线程的问题。我有一个异步处理HTTP请求的系统。最终,ObservableCollection绑定到WPF控件

我一直在使用Dispatcher.CurrentDispatcher.CheckAccess()代替Silverlight的Deployment.Current.Dispatcher.CheckAccess()来确定我是否在UI线程中。然而,看看这里关于堆栈溢出的文档和其他问题,似乎WPF版本只是在需要时创建了一个调度程序

当前系统在调度线程上使用CheckAccess来确定我们是否在UI线程上,然后将其传递给在工作线程中运行的处理程序。工作线程上的CheckAccess也返回true,可能是因为它刚刚创建了自己的调度程序

移动到跨线程可观察集合不是一个选项。另一个问题是,我需要维护对UI线程调度程序的引用。有没有办法使用线程命名空间中的Dispatcher类/其他类来确定我是否在UI线程中?或者我应该继续使用调度线程的调度程序来运行处理程序,而不管调度线程是否是UI线程

谢谢

我一直在使用Dispatcher.CurrentDispatcher

这将简单地获取与调用(当前)线程相关联的调度程序,如果不存在,则将创建该调度程序。因此,正如您所发现的,对该调度器调用CheckAccess()将返回true


您可以尝试使用
Application.Current.Dispatcher
,我的观察结果显示这是与主UI线程关联的调度器,尽管我不能确定是否总是这样。您还需要记住,如果您有多个UI线程,这可能不起作用,您将不知道哪个线程拥有绑定到ObservableCollection的UI元素。在这种情况下,您需要开始向相应的Dispatcher(or)传递引用。

我正在尝试使用它,但由于某些原因,在我的项目中找不到应用程序类。我添加了对PresentationFramework的引用,但编译器仍然告诉我“Application”在名称空间“System.Windows”中不可用。是否还有其他程序集需要参考?我在一个C#Class库工作。