0

我正在BackgroundAgent为我的 WP7 应用程序编写一个定期从 Internet 下载图像、对其进行修改、然后用它更新动态磁贴的应用程序。我发现加载位图图像是异步的,需要注册ImageOpened事件。

sourceBitmap.ImageOpened += new EventHandler<RoutedEventArgs>((sender, e) => ...

问题是这让我离开了主线程,主线程将返回到 ScheduledAgent 并NotifyComplete()在新线程完成之前调用。我认为这会导致问题并且不理想。

有没有办法让主线程等到图像被加载、编辑并推送到动态磁贴?

或者我应该只使用一个字段IsCompleteThread.Sleep()直到它为真?

4

2 回答 2

1

不要打电话Thread.Sleep

您只需要仔细管理您的调用,NotifyComplete以确保在下载完成之前您不会调用它。

于 2011-10-24T16:17:11.333 回答
0

使用任务并行库。这样,您可以添加延续,以强制任务在调用 NotifyComplete() 之前等待您的异步事件。

我写了一篇关于它的博客文章

简短的部分是使用TaskCompletionSource<T>, 使 TPL 延续等待ImageOpened事件。

完全可行。

Windows Phone 的 TPL,可以在 NuGet上找到。

于 2011-10-25T07:21:02.000 回答