Cannot convert lambda expression to type 'Syst

2019-02-04 22:54发布

This question already has an answer here:

I'm having a problem that I can't seem to figure out, although its kind of a standard question here on Stackoverflow.

I'm trying to update my Bing Maps asynchronously using the following code (mind you, this is from an old Silverlight project and does not seem to work in WPF)

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

What am I doing wrong?

标签: c# wpf delegates
3条回答
唯我独甜
2楼-- · 2019-02-04 23:17

The BeginInvoke() method's parameter is the base Delegate class.

You can only convert a lambda expression to a concrete delegate type.

To fix this issue, you need to explicitly construct a delegate:

BeginInvoke(new MethodInvoker(() => { ... }));
查看更多
别忘想泡老子
3楼-- · 2019-02-04 23:21

Try

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

Or use Action

查看更多
Summer. ? 凉城
4楼-- · 2019-02-04 23:24

You have to cast it explicitly to a Action in order for the conversion to System.Delegate to kick in.

That is:

_map.Dispatcher.BeginInvoke((Action)(() =>
{
    _map.Children.Clear();
    foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map)))
    {
        _map.Children.Add(projectedPin.GetElement(ClusterTemplate));
    }
}));
查看更多
登录 后发表回答