многопоточность wpf - PullRequest
       12

многопоточность wpf

0 голосов
/ 25 мая 2010

Я использую вызов веб-ссылки в новом рабочем потоке в моем приложении следующим образом:

Thread callRunner = new Thread(delegate() 
    { _mediator.IncomingCallDetails(phoneNumber); }); 
callRunner.Start() ;   

_mediator вызывает веб-ссылку и воспроизводит вызывающему абоненту следующее событие:

void IncomingCallComplited(IncomingCallEventArg args)  
{  
    Caller = args.Caller;  
    Lodgers = args.Lodgers;  
    PreviousMissions = args.PreviousMissions;  
}  

Caller, Lodgers и PreviousMissions - это свойства объекта, которые привязываются к элементу GUI, так как на данный момент привязка работает нормально, и я могу видеть значения из веб-ссылки на экране. Мой вопрос - использовать ли Dispatcher в событии или любой другой этап? и если я могу, может кто-нибудь объяснить, почему? Спасибо
Эран

1 Ответ

0 голосов
/ 25 мая 2010

На самом деле, система привязки позаботится об этом за вас, поэтому вам не нужно явно перенаправлять вызов в поток пользовательского интерфейса. Тем не менее, это поведение не задокументировано (если я не пропустил его), поэтому я не уверен, что вы должны полагаться на него ...

Кроме того, обратите внимание, что, хотя система привязки правильно распределяет событие PropertyChanged между потоками, событие CollectionChanged равно , а не . Поэтому, если вы добавляете данные из другого потока в ObservableCollection, связанный с пользовательским интерфейсом, вам нужно вызвать Dispatcher.Invoke. Или вы можете использовать этот custom ObservableCollection class , который вызывает событие CollectionChanged в потоке пользовательского интерфейса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...