相关疑难解决方法(0)

Dispatcher.BeginInvoke:无法将lambda转换为System.Delegate

我正试着打电话System.Windows.Threading.Dispatcher.BeginInvoke.方法的签名是这样的:

BeginInvoke(Delegate method, params object[] args)
Run Code Online (Sandbox Code Playgroud)

我试图传递一个Lambda而不是创建一个Delegate.

_dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } );
Run Code Online (Sandbox Code Playgroud)

它给了我一个编译错误说我

无法将lambda转换为System.Delegate.

委托的签名将对象作为参数并返回void.我的lambda匹配这个,但它不起作用.我错过了什么?

c# wpf lambda dispatcher begininvoke

72
推荐指数
5
解决办法
4万
查看次数

具有匿名委托的Dispatcher.Invoke适用于Silverlight但不适用于WPF

在Silverlight 4中,我有一个自定义服务类,它有一个异步的Completed事件.在Completed事件中,我获取返回的数据并通过以下方式调用populate方法:

private void service_Completed(object sender, CompletedEventArgs args)
{
    Dispatcher.BeginInvoke(() => populateInbox(args.Jobs));
}

private void populateInbox(List<JobViewModel> jobs)
{
    inbox.DataContext = jobs;
}
Run Code Online (Sandbox Code Playgroud)

BeginInvokeSL4中的工作,但是当我将它移植到WPF时,我收到以下错误:

无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型

我尝试将其更改为一个内联的,匿名的,参数化的代表:

Dispatcher.BeginInvoke(delegate(List<JobViewModel> jobs)
{
    inbox.DataContext = jobs;
});
Run Code Online (Sandbox Code Playgroud)

但是,这会产生相同的编译时错误.

知道如何在WPF中使用它吗?重构使用BackgroundWorker它不是我的选择.

c# wpf asynchronous begininvoke anonymous-delegates

10
推荐指数
1
解决办法
2万
查看次数