web-dev-qa-db-fra.com

Impossible de convertir l'expression lambda en type 'System.Delegate'

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.

46
mpen

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(() => { }));
63
thecoop
 this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));
4
Narottam Goyal

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

1
IAbstract