多线程BackgroundAgent?

时间:2011-10-24 16:02:33

标签: multithreading windows-phone-7 background-agents

我正在为我的WP7应用编写一个BackgroundAgent,定期从互联网上下载图像,修改它,然后用它更新实时图块。我发现加载位图图像是异步的,需要注册ImageOpened事件。

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

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

有没有办法让主线程等到图像加载,编辑并推送到实时图块?

或者我应该使用字段IsCompleteThread.Sleep(),直到它成立为止?

2 个答案:

答案 0 :(得分:1)

请勿致电Thread.Sleep

您只需要仔细管理对NotifyComplete的来电,以确保在下载完成之前不对其进行调整。

答案 1 :(得分:0)

使用Task Parallel Library。这样,您可以在调用NotifyComplete()之前添加continuation,以强制任务等待异步事件。

我写过blog post about it

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

完全可行。

Windows Phone的TPL,可以是found on NuGet