不能将lambda表达式转换为类型'因为它不是委托类型

本文关键字:类型 因为 lambda 表达式 转换 不能 | 更新日期: 2023-09-27 17:54:06

我遇到了一个问题,我似乎无法弄清楚,尽管这是Stackoverflow上的一个标准问题。

我正在尝试使用以下代码异步更新我的必应地图(请注意,这是来自旧的Silverlight项目,似乎不能在WPF中工作)

_map.Dispatcher.BeginInvoke(() =>
{
    _map.Children.Clear();
    foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map)))
    {
        _map.Children.Add(projectedPin.GetElement(ClusterTemplate));
    }
});

我做错了什么?

不能将lambda表达式转换为类型'因为它不是委托类型

您必须显式地将其强制转换为Action,以便转换为System.Delegate

:

_map.Dispatcher.BeginInvoke((Action)(() =>
{
    _map.Children.Clear();
    foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map)))
    {
        _map.Children.Add(projectedPin.GetElement(ClusterTemplate));
    }
}));

BeginInvoke()方法的参数是基本的Delegate类。

您只能将lambda表达式转换为具体的委托类型。

要解决这个问题,你需要显式地构造一个委托:

BeginInvoke(new MethodInvoker(() => { ... }));

Try

Dispatcher.BeginInvoke(new System.Threading.ThreadStart(delegate
{
//Do something
}));

或者使用Action

相关文章: