我对这个话题不是很有经验,所以如果这不是很清楚,请原谅我。
我创建了一个可移植的类库,它有一个 ObservableCollection 部分,每个部分都有一个 ObservableCollection 项目。
这两个集合都绑定到单独的 Win8 和 WP8 应用程序的 UI。
我试图找出正确填充这些集合的正确方法,以便从 PCL 类更新 UI。
如果该类在 win8 项目中,我知道我可以执行类似 Dispatcher.BeginInvoke 的操作,但这不会转化为 PCL,我也无法在 WP8 项目中重用它。
在这个线程(可移植类库等效于 Dispatcher.Invoke 或 Dispatcher.RunAsync)我发现了 SynchroniationContext 类。
我传入了对主应用程序 SynchroniationContext 的引用,当我填充这些部分时,我可以这样做,因为它只是被更新的一个对象:
if (SynchronizationContext.Current == _synchronizationContext)
{
// Execute the CollectionChanged event on the current thread
UpdateSections(sections);
}
else
{
// Post the CollectionChanged event on the creator thread
_synchronizationContext.Post(UpdateSections, sections);
}
但是,当我尝试对文章做同样的事情时,我必须同时引用部分和文章,但 Post 方法只允许我传入单个对象。
我尝试使用 lambda 表达式:
if (SynchronizationContext.Current == _synchronizationContext)
{
// Execute the CollectionChanged event on the current thread
section.Items.Add(item);
}
else
{
// Post the CollectionChanged event on the creator thread
_synchronizationContext.Post((e) =>
{
section.Items.Add(item);
}, null);
}
但我猜这是不正确的,因为我收到关于“为不同线程编组”的错误。
那么我在哪里错了?如何从 PCL 正确更新这两个集合,以便两个应用程序也可以更新它们的 UI?
非常感谢!