#c# #multithreading #silverlight #windows-phone-7
#c# #многопоточность #silverlight #windows-phone-7
Вопрос:
Существуют ли потоки в WP7 во всем приложении или они ограничены страницей? Допустим, я начал загрузку со страницы, которая обрабатывается фоновым потоком как обычно, и ее ход обновляется в строке состояния. Теперь пользователь желает использовать другие аспекты приложения. Умрет ли фоновый поток, если он перейдет на другую страницу, используя элементы управления на панели приложений или кнопку «Назад», на страницу внутри приложения? Если нет, то какова хорошая практика в отношении фонового потока, предназначенного только для загрузок… например, если они могут существовать во всем приложении, должны ли они инициироваться при запуске приложения и заставляться ждать, пока в очереди загрузки не появится запрос?
Спасибо
-Egon
Комментарии:
1. Поток должен существовать независимо от того, какая страница запущена. Однако в вашей ситуации звучит так, как будто ваше приложение на корневом уровне должно запускать поток … а не страницу.
Ответ №1:
Если у вас есть поток, предназначенный исключительно для загрузки внешнего ресурса, я бы запустил этот поток на уровне приложения. Поток должен сообщать о ходе выполнения / завершении / и т.д. объекту уровня приложения, а не конкретной странице. Страница должна запрашивать объект уровня приложения, если ему нужны подробности для отображения. Таким образом, взаимодействие между страницами не будет иметь никакого эффекта, и данные (например, ход загрузки) всегда будут доступны для любой страницы, которая этого хочет.
Единственный раз, когда я могу сделать это на уровне страницы, — это если приложение содержит только одну страницу, но тогда это практически одно и то же.
Комментарии:
1. Просто для пояснения в контексте вопроса: использование фонового потока через ThreadPool будет выполняться до тех пор, пока оно не будет завершено или приложение не завершится, независимо от того, где / как оно было инициировано. Я согласен с Мэттом в том, что у вас должен быть какой-нибудь объект уровня приложения (статический или одноэлементный через factory), который отслеживает статус, затем страница должна обновляться с этого объекта.