web-dev-qa-db-fra.com

Comment obtenir le thread d'interface utilisateur Dispatcher?

Existe-t-il un moyen d'obtenir la variable Dispatcher du thread d'interface utilisateur lorsque vous ne faites référence à aucun élément d'interface utilisateur?

49
Peter

Vous pouvez récupérer le UI Dispatcher à partir de l'instance d'application statique: Application.Current.Dispatcher 

Vous voudrez peut-être vérifier d'abord Application.Current pour la valeur NULL, car il peut être effacé pendant une séquence d'arrêt.

91
Abe Heidebrecht

Ce qui suit fonctionne beaucoup mieux pour moi lorsque je suis utilisé dans une application WinForms utilisant également WPF (dans mon cas, Arcmap.exe d'Esri).

private System.Windows.Threading.Dispatcher Dispatcher { get; set; }

// I put this in my view model constructor as it MUST be called from UI thread
Dispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;

L'autre méthode (qui impliquait d'appeler new System.Windows.Application() pour renseigner System.Windows.Application.Current) me posait problème à chaque fois que j'ouvrais une nouvelle fenêtre WPF, puis que je la fermais. Non seulement cela annulait System.Windows.Application.Current, mais je ne pouvais plus ouvrir de nouvelles fenêtres en tant que méthodes InitializeComponents(); toutes ont échoué avec: 

System.InvalidOperationException: 'L'objet Application est en cours de traitement fermer.'

Jusqu'à présent, la nouvelle solution fonctionne sans ces effets secondaires.

0
M Townsend