Cannot convert lambda expression to type 'Syst

2019-02-04 23:33发布

问题:

This question already has an answer here:

  • Cannot convert lambda expression to type 'System.Delegate' 3 answers

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?

回答1:

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));
    }
}));


回答2:

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:

Try

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

Or use Action



标签: c# wpf delegates