首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows :如何判断Deployment.Current.Dispatcher.BeginInvoke何时完成?

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

Stack Overflow用户
提问于 2012-02-26 13:42:14
回答 1查看 3.1K关注 0票数 3

我试图通过将数据加载部分放入后台线程而不是在页面加载时在前台运行,从而提高WP7应用程序中页面的UI响应能力。

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

代码语言:javascript
复制
Deployment.Current.Dispatcher.BeginInvoke(() => { _events.Add(_newItem); });

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

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

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

对于如何在开始前检查添加是否已经完成,有什么建议吗?

谢谢。

菲利普

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-26 14:18:06

这很容易;)

代码语言:javascript
复制
// 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线程执行的地方使用。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9453553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档