Comme vous le savez probablement, toute modification d’un objet engendrant le changement d’un élément de l’arbre visuel doit s’effectuer dans le thread UI. Le Dispatcher que tous les DependencyObjects exposent permet d’exécuter du code sur le thread UI par la méthode BeginInvoke. Il arrive cependant, par exemple dans le cas d’un service interne, qu’aucun DependencyObject ne soit accessible dynamiquement. Comment alors exécuter du code sur le thread UI?

…en profitant du fait qu’une application Silverlight n’a qu’un seul arbre visuel dont la racine (et donc son Dispatcher) est accessible statiquement :

System.Windows.Deployment.Current.Dispatcher

Notons que ce n’est pas aussi évident pour une application WPF, qui peut avoir plusieurs HWNDs (par exemple plusieurs objets Window démarrés depuis des threads différents) ayant chacune leur propre arbre visuel, et leur propre dispatcher.