Многопоточный BackgroundAgent? - PullRequest
0 голосов
/ 24 октября 2011

Я пишу BackgroundAgent для моего приложения WP7, которое периодически загружает изображение из Интернета, модифицирует его, а затем обновляет живую плитку. Я обнаружил, что загрузка растрового изображения является асинхронной и требует регистрации события ImageOpened.

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

Проблема в том, что это выводит меня из основного потока, который вернется обратно к ScheduledAgent и вызовет NotifyComplete() до завершения нового потока. Я предполагаю, что это вызовет проблемы и не идеально.

Есть ли способ заставить основной поток ждать, пока изображение будет загружено, отредактировано и помещено в живую плитку?

Или мне просто нужно использовать поля IsComplete и Thread.Sleep(), пока оно не станет истинным?

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Не звоните Thread.Sleep.

Вам просто нужно тщательно управлять своими вызовами на NotifyComplete, чтобы убедиться, что вы не позвонили до завершения загрузки.

0 голосов
/ 25 октября 2011

Использовать параллельную библиотеку задач .Таким образом, вы можете добавить продолжения, чтобы заставить задачи ждать ваших асинхронных событий перед вызовом NotifyComplete ().

Я написал сообщение в блоге об этом .

Короткая часть - использовать TaskCompletionSource<T>, чтобы продолжения TPL ожидали события ImageOpened.

Прекрасно выполнимо.

TPL для Windows Phone, можно найти в NuGet .

...