Подтвердить что ты не робот

Невозможно преобразовать лямбда-выражение в тип "System.Delegate"

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

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

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

_uiDispatcher = Dispatcher.CurrentDispatcher;

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

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

4b9b3361

Ответ 1

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

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

_uiDispatcher.Invoke(new Action(() => { }));

Ответ 2

 this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));

Ответ 3

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

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