【发布时间】:2010-12-14 19:13:55
【问题描述】:
据我了解 Dispatcher.Invoke 和 Dispatcher.BeginInvoke 在 UI 线程上执行,唯一的区别是 Invoke 是同步的,而 BeginInvoke 是异步的。我的问题是当我使用这段代码时
EDisc.App.Current.Dispatcher.
Invoke(
DispatcherPriority.Normal, new Action(delegate
{
context = NavigationManager.CurrentPage.DataContext;
}));
返回上下文的值。但是使用下面的代码
EDisc.App.Current.Dispatcher.
BeginInvoke(
DispatcherPriority.Normal, new Action(delegate
{
context = NavigationManager.CurrentPage.DataContext;
}));
上下文为空,我得到一个 InvalidOperation 异常,说“
调用线程无法访问此对象,因为不同的线程拥有它。我是从使用 UseSynchronizationContext = false 执行的 WCF 服务调用它。有人可以解释这种行为吗?
【问题讨论】:
-
EDisc.App的类型是什么? -
是Applicaion Object的类名.Application x:Class="EDisc.App"
标签: wpf