我遇到了一个"Invalid Cross Thread Access"的问题,但是通过一些研究,我设法使用调度程序来解决它。
现在,在我的应用中,我有使用延迟加载的对象。我使用 WCF 进行异步调用,并像往常一样使用 Dispatcher 来更新我的对象 DataContext,但是对于这种情况它没有起作用。不过我在这里找到了解决方法。以下是我不理解的部分。
在我的 UserControl 中,我有一个调用对象上的方法的代码。对该方法的调用在 Dispatcher 中执行,如下所示。
Dispatcher.BeginInvoke( () => _CurrentPin.ToggleInfoPanel() );
正如我之前提到的,这还不足以满足Silverlight的需求,我必须在我的对象内再进行另一个 Dispatcher 调用。我的对象不是一个UIElement,它只是一个处理自己加载/保存的简单类。
因此,问题被修复通过调用:
Deployment.Current.Dispatcher.BeginInvoke( () => dataContext.Detail = detail );
在我的类中。
我为什么必须调用两次Dispatcher才能实现这个?高级别的调用不应该足够吗?Deployment.Current.Dispatcher和UIElement中的Dispatcher之间有什么区别吗?