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?
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));
}
}));
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(() => { ... }));
Try
Dispatcher.BeginInvoke(new System.Threading.ThreadStart(delegate
{
//Do something
}));
Or use Action
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With