Не удается преобразовать лямбда-выражение в тип «System.Delegate» - PullRequest
45 голосов
/ 03 марта 2012

Ни одна из этих работ:

_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });

Все, что я хочу сделать, это вызвать встроенный метод в моем основном потоке пользовательского интерфейса.Поэтому я назвал это в главном потоке:

_uiDispatcher = Dispatcher.CurrentDispatcher;

И теперь я хочу выполнить некоторый код в этом потоке из другого потока.Как мне это сделать?Я использую неправильный синтаксис?

Обратите внимание, что это , а не приложение WPF;Я ссылался на WindowsBase, чтобы получить доступ к классу Dispatcher.

Ответы [ 3 ]

62 голосов
/ 04 марта 2012

Проблема в том, что вы не предоставляете точный тип делегата, которого хотите вызвать. Dispatcher.Invoke просто занимает Delegate. Это Action<T>? Если это так, что такое T? Это MethodInvoker? Action? Что?

Если ваш делегат не принимает аргументов и ничего не возвращает, вы можете использовать Action или MethodInvoker. Попробуйте это:

_uiDispatcher.Invoke(new Action(() => { }));
4 голосов
/ 03 октября 2014
 this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));
1 голос
/ 04 марта 2012

Если я что-то пропустил, все, что вы нам сказали, это , а не приложение WPF .Я не думаю, что Dispatcher - правильный класс для использования.

Если это приложение WinForm, к вашему потоку пользовательского интерфейса можно получить доступ через WindowsFormsSynchronizationContext

...