Я пытаюсь сделать пользовательский интерфейс страницы в приложении WP7 более отзывчивым, помещая часть загрузки данных в фоновый поток, а не на передний план при загрузке страницы.
Код потока, в основном, обрабатывает некоторые данные и добавляет элементы в наблюдаемую коллекцию; чтобы избежать проблем с исключениями, я выполняю что-то вроде:
Deployment.Current.Dispatcher.BeginInvoke(() => { _events.Add(_newItem); });
, чтобы добавить элемент в коллекцию в потоке пользовательского интерфейса.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что для последующей части кода необходимо выполнить foreach для коллекции, чтобы выяснить, куда вставить новый элемент, а не просто добавить его. К сожалению, я обнаружил, что поток пользовательского интерфейса может иногда выполнять добавление, когда я нахожусь в цикле foreach, мгновенно нарушая foreach.
Из прочитанного мною чтения похоже, что одним из подходов будет вызов EndInvoke (), чтобы заблокировать фоновый поток, пока часть пользовательского интерфейса не будет завершена. К сожалению, похоже, что реализация Wp7 / Silverlight не поддерживает EndInvoke.
Любые предложения о том, как я могу проверить, что добавление было завершено, прежде чем я начну foreach?
Спасибо.
Philip