Aucun de ces travaux:
_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });
Tout ce que je veux faire, c'est invoquer une méthode en ligne sur mon thread d'interface utilisateur principal. J'ai donc appelé cela sur le fil principal:
_uiDispatcher = Dispatcher.CurrentDispatcher;
Et maintenant, je veux exécuter du code sur ce thread à partir d'un autre thread. Comment fait-on ça? Suis-je en train d'utiliser la mauvaise syntaxe?
Notez que c'est pas une application WPF; J'ai référencé WindowsBase
pour pouvoir accéder à la classe Dispatcher
.
Le problème est que vous ne fournissez pas exactement type de délégué que vous souhaitez invoquer. Dispatcher.Invoke
prend juste un Delegate
. Est-ce un Action<T>
? Si oui, qu'est-ce que T
? Est-ce un MethodInvoker
? Action
? Quelle?
Si votre délégué ne prend aucun argument et ne renvoie rien, vous pouvez utiliser Action
ou MethodInvoker
. Essaye ça:
_uiDispatcher.Invoke(new Action(() => { }));
this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));
Sauf si j'ai raté quelque chose, tout ce que vous nous avez dit, c'est que ce n'est pas une application WPF . Je ne pense pas que le répartiteur soit la bonne classe à utiliser.
S'il s'agit d'une application WinForm, votre thread d'interface utilisateur est accessible via WindowsFormsSynchronizationContext