Dans le constructeur d'un objet, j'ai besoin de créer un objet MediaElement WPF: mais la classe peut également être instanciée d'un autre thread afin que je dois utiliser p> < Pré> xxx pré> Mais comment puis-je obtenir la bonne instance Dispatcher dans ce constructeur: S P> P>
4 Réponses :
Vous pouvez simplement utiliser Dispatcher. CurrentDispatcher .invoke ... P>
Toutefois, si, pour une raison quelconque qui ne fonctionne pas, vous pourriez avoir votre classe recevoir une référence au répartiteur dans le cadre de son constructeur. Il suffit de passer dans Dispatcher.CurrentDispatcher code> du fil de l'interface utilisateur au moment de la construction. P>
Selon MSDN, cela retournera le répartiteur associé au thread actuel et créera une nouvelle celle-ci n'est pas déjà créée. Cela ne ressemble pas à quelque chose que vous voulez faire dans ce cas. Vous auriez besoin du répartiteur associé à l'interface utilisateur. Ou plus spécifiquement le répartiteur d'une fenêtre spécifique.
+1 pour passer une référence au répartiteur actuel.
Le Dispatcher statique.CurrentTrisPatcher n'a pas fonctionné pour moi dans un scénario similaire. J'ai essayé Application.Current.Dispatcher comme suggéré par Sinelaw - cela a fonctionné.
Si vous ajoutez des références à SYSTEM.WINDOWS.FORMS CODE> à votre projet, vous pouvez continuer à utiliser
Application.Deevents () Code> dans WPF. P>
Comme expliqué dans cette réponse : p>
Vous pouvez saisir le répartiteur de l'UI de l'instance d'application statique:
application.current.dispatcher code> p>
Vous voudrez peut-être vérifier
application.current code> pour NULL en premier, comme cela peut être effacé lors d'une séquence d'arrêt. P> blockQuote>
Aussi, Voici les docs pour la classe d'application. p>
Vérification si application.current code> est NULL est en quelque sorte risqué. Il peut être valide lorsque vous le vérifiez (avec
si code>) dans le fil de travail, mais peut devenir null lorsque vous l'utilisez ensuite. Je mettez habituellement
application.current.dispatcher.invoke code> dans le bloc Thy Catch.