我正在为我的WP7应用编写一个BackgroundAgent
,定期从互联网上下载图像,修改它,然后用它更新实时图块。我发现加载位图图像是异步的,需要注册ImageOpened
事件。
sourceBitmap.ImageOpened += new EventHandler<RoutedEventArgs>((sender, e) => ...
问题是这使我脱离主线程,它将返回到ScheduledAgent并在新线程完成之前调用NotifyComplete()
。我认为这会导致问题并且不理想。
有没有办法让主线程等到图像加载,编辑并推送到实时图块?
或者我应该使用字段IsComplete
和Thread.Sleep()
,直到它成立为止?
答案 0 :(得分:1)
请勿致电Thread.Sleep
。
您只需要仔细管理对NotifyComplete
的来电,以确保在下载完成之前不对其进行调整。
答案 1 :(得分:0)
使用Task Parallel Library。这样,您可以在调用NotifyComplete()之前添加continuation,以强制任务等待异步事件。
简短的部分是使用TaskCompletionSource<T>
,使TPL延续等待ImageOpened
事件。
完全可行。
Windows Phone的TPL,可以是found on NuGet。