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

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

BeginInvoke(Delegate method, params object[] args)

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

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

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

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

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

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(() => { ... }).