Dispatcher.BeginInvoke:不能将lambda转换为System.Delegate
我试图调用System.Windows.Threading.Dispatcher.BeginInvoke
。 该方法的签名是这样的:
BeginInvoke(Delegate method, params object[] args)
我试图将它传递给一个Lambda,而不必创build一个Delegate。
_dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } );
它给我一个编译器错误,说我不能将lambda转换为System.Delegate。 委托的签名将一个对象作为参数并返回void。 我的lambda匹配这个,但它不工作。 我错过了什么?
由于这个方法需要一个System.Delegate ,所以你需要给它一个特定types的委托,这样声明。 这可以通过转换或通过新的DelegateType创build指定的委托来完成,如下所示:
_dispatcher.BeginInvoke( new Action<MyClass>((sender) => { DoSomething(); }), new object[] { this } );
另外,正如SLak指出的那样, Dispatcher.BeginInvoke需要一个params数组,所以你可以写:
_dispatcher.BeginInvoke( new Action<MyClass>((sender) => { DoSomething(); }), this );
或者,如果DoSomething是这个对象本身的方法:
_dispatcher.BeginInvoke(new Action(this.DoSomething));
短:
_dispatcher.BeginInvoke((Action)(() => DoSomething()));
使用内联Lambda …
Dispatcher.BeginInvoke((Action)(()=>{ //Write Code Here }));
如果从项目中引用System.Windows.Presentation.dll并添加using System.Windows.Threading
则可以访问允许使用lambda语法的扩展方法。
using System.Windows.Threading; ... Dispatcher.BeginInvoke(() => { });