gpt4 book ai didi

c# - Windows Phone : how to tell when Deployment. Current.Dispatcher.BeginInvoke 已完成?

转载 作者:行者123 更新时间:2023-11-30 13:20:15 25 4
gpt4 key购买 nike

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

线程代码本质上是处理一些数据并将项目添加到可观察的集合中;为了避免异常问题,我执行类似:

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

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

我现在遇到的问题是代码的后续部分需要对集合执行 foreach 以确定在何处插入新项而不是仅仅添加它。不幸的是,我发现当我在 foreach 循环中时,UI 线程有时可以执行它的添加,立即中断 foreach。

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

关于如何在开始 foreach 之前检查添加是否已完成有什么建议吗?

谢谢。

菲利普

最佳答案

这很容易;)

// 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 线程执行的地方使用这种方法

关于c# - Windows Phone : how to tell when Deployment. Current.Dispatcher.BeginInvoke 已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9453553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com