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?
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.
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.