Я создал модель просмотра в Silverlight. Этот вид Модель имеет событие, определенное как:Поднять событие с помощью SynchronizationContext в Silverlight
public event EventHandler Data_Loaded;
Я хочу «поднять» это событие, когда данные вызова службы завершены. Это позволит моему интерфейсу правильно реагировать. Обратите внимание, что это не просто простой сценарий привязки, поэтому я хочу это событие.
Сервисный вызов выполняется через HttpWebRequest. Как только этот запрос будет выполнен, я правильно разбираю результаты. Я пытаюсь, чтобы пользовательский интерфейс знал, что я закончил, но изначально я получал сообщение об ошибке «Недопустимый сквозной доступ». Я поговорил с сотрудником, который сказал мне, что я должен использовать SynchronizationContext.Current для создания события. К сожалению, я не понимаю, как это сделать. Может кто-нибудь, пожалуйста, объясните мне это?
Я не поднимаю событие в пользовательском интерфейсе. Пользовательский интерфейс подписывается на событие в ViewModel. Если я использую диспетчер, кажется, что пользовательский интерфейс слишком тесно связан с ViewModel. Я ошибаюсь? – user462166
Ключом к проблеме является то, что ваш пользовательский интерфейс прослушивает это событие, событие должно быть выбрано из потока пользовательского интерфейса. Хотя это возможно сделать с SyncronizationContext, это может быть настоящей болью, потому что SyncronizationContext.Current будет null, если вы не используете нить пользовательского интерфейса. Это означает, что вам нужно получить SyncronizationContext в потоке пользовательского интерфейса и сохранить его где-нибудь. Затем вы можете использовать это, чтобы перенаправить вызов обратно в нужный поток. В общем, в Silverlight я бы не стал считать его тесно связанным, если вы используете Deployment, а не App.RootVisual для доступа к диспетчеру. – Stephan