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?