Диспетчер.BeginInvoke: не удается преобразовать лямбда в систему.Делегат


Я пытаюсь позвонить System.Windows.Threading.Dispatcher.BeginInvoke. Сигнатура метода такова:

BeginInvoke(Delegate method, params object[] args)

Я пытаюсь передать ему лямбда вместо того, чтобы создавать делегат.

_dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } );

Это дает мне ошибку компилятора, сказав, что я

не удается преобразовать лямбда в систему.Делегат.

подпись делегата принимает объект в качестве параметра и возвращает void. Моя лямбда соответствует этому, но это не работает. Что я не хватает?

5 69

5 ответов:

Так как метод принимает

короче:

_dispatcher.BeginInvoke((Action)(() => DoSomething()));

С Помощью Встроенного Лямбда...

Dispatcher.BeginInvoke((Action)(()=>{
  //Write Code Here
}));

Если вы ссылаетесь на систему.Окна.Демонстрация.dll из вашего проекта и добавить using System.Windows.Threading затем вы можете получить доступ к методу расширения, который позволяет использовать синтаксис лямбда.

using System.Windows.Threading;

...

Dispatcher.BeginInvoke(() =>
{
});

мы создаем методы расширения для этого. Е. Г.

public static void BeginInvoke(this Control control, Action action)
    => control.BeginInvoke(action);

теперь мы можем вызвать его из формы:this.BeginInvoke(() => { ... }).