Невозможно преобразовать лямбда-выражение в тип "System.Delegate"
Ни одна из этих работ не работает:
_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });
Все, что я хочу сделать, это вызвать встроенный метод в моем основном потоке пользовательского интерфейса. Поэтому я назвал это в основном потоке:
_uiDispatcher = Dispatcher.CurrentDispatcher;
И теперь я хочу выполнить некоторый код в этом потоке из другого потока. Как мне это сделать? Я использую неправильный синтаксис?
Обратите внимание, что это не приложение WPF; Я ссылался на WindowsBase
, чтобы получить доступ к классу Dispatcher
.
Ответы
Ответ 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