Compreendendo o Dispatcher do Silverlight

Eu tive um problema de acesso inválido de thread cruzado, mas fiz uma pequena pesquisa e consegui corrigi-lo usando o Dispatcher.

Agora, no meu aplicativo, tenho objetos com carregamento lento. Eu faria uma chamada assíncrona usando o WCF e, como de costume, uso o Dispatcher para atualizar meus objetos DataContext, no entanto, não funcionou nesse cenário. No entanto, encontrei uma soluçãoaqui. Aqui está o que eu não entendo.

No meu UserControl, tenho código para chamar umAlternancia método no meu objeto. A chamada para esse método está dentro de um Dispatcher assim.

Dispatcher.BeginInvoke( () => _CurrentPin.ToggleInfoPanel() );

Como mencionei antes, isso não foi suficiente para satisfazer o Silverlight. Eu tive que fazeroutro Chamada de expedidor dentro do meu objeto. Meu objeto éNÃO é UIElement, mas uma classe simples que lida com todo o seu próprio carregamento / salvamento.

Portanto, o problema foi corrigido chamando

Deployment.Current.Dispatcher.BeginInvoke( () => dataContext.Detail = detail );

dentro da minha classe.

Por que eu tive que ligar para o Dispatcher duas vezes para conseguir isso? Uma chamada de alto nível não deveria ser suficiente? Existe uma diferença entre oDeployment.Current.Dispatcher e o expedidor em um UIElement?

questionAnswers(2)

yourAnswerToTheQuestion