Windows Phone:如何判断Deployment.Current.Dispatcher.BeginInvoke何时完成?

我试图通过将数据加载部分放入后台线程而不是在页面加载时在前台运行来使WP7应用程序中的页面UI更具响应性。

线程代码基本上通过一些数据工作,并将项添加到可观察集合中; 为了避免exception问题,我执行以下操作:

Deployment.Current.Dispatcher.BeginInvoke(() => { _events.Add(_newItem); }); 

以便在UI线程中完成将项添加到集合中。

我现在遇到的问题是,代码的后续部分需要对集合执行foreach ,以便找出插入新项目的位置而不是仅添加它。 不幸的是,我发现UI线程有时可以执行其添加,而我在foreach循环中,立即打破foreach。

从我已经完成的阅读中,看起来一种方法是调用EndInvoke()以阻止后台线程,直到完成UI部分。 不幸的是,看起来Wp7 / Silverlight实现不支持EndInvoke。

关于如何在开始foreach之前检查Add已经完成的任何建议?

谢谢。

菲利普

这很容易;)

 // must be executed in background foreach (Item item in Items) { EventWaitHandle Wait = new AutoResetEvent(false); Deployment.Current.Dispatcher.BeginInvoke(() => { _events.Add(_newItem); Wait.Set(); }); // wait while item is added on UI Wait.WaitOne(); } // here all items are added 

这种方法可以在任何需要同步后台和UI线程执行的地方使用