У меня есть вопрос о диспетчерах и фоновых рабочих потоках. У меня есть система, в которой я асинхронно обрабатываю HTTP-запросы. В конце концов ObservableCollection привязывается к элементу управления WPF.
Я использовал Dispatcher.CurrentDispatcher.CheckAccess () вместо Deployment.Current.Dispatcher.CheckAccess () Silverlight, чтобы определить, нахожусь ли я в потоке пользовательского интерфейса или нет. Однако, глядя на документацию и другие вопросы здесь о переполнении стека, кажется, что версия WPF просто создает диспетчер, если требуется.
Текущая система использует CheckAccess в потоке планирования, чтобы определить, находимся ли мы в потоке пользовательского интерфейса, и затем передает его обработчику, который выполняется в рабочем потоке. CheckAccess в рабочем потоке также возвращает true, предположительно потому, что он только что создал свой собственный диспетчер.
Перемещение в наблюдаемую коллекцию с перекрестным потоком не вариант. Другой вопрос сказал, что мне нужно сохранить ссылку на диспетчер потока пользовательского интерфейса. Есть ли способ использовать класс Dispatcher / другие классы в пространстве имен Threading, чтобы определить, нахожусь ли я в потоке пользовательского интерфейса? Или я должен пойти дальше и использовать диспетчер потока планирования для запуска обработчика независимо от того, был ли поток планирования потоком пользовательского интерфейса или нет?
Спасибо!