我遇到了一个我似乎无法弄清楚的问题,尽管它在Stackoverflow上有一个标准问题.
我正在尝试使用以下代码异步更新我的Bing地图(请注意,这是来自旧的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));
}
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Jea*_*nal 35
您必须明确地将其强制Action转换为a 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));
}
}));
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 14
该BeginInvoke()方法的参数是基Delegate类.
您只能将lambda表达式转换为具体的委托类型.
要解决此问题,您需要显式构造委托:
BeginInvoke(new MethodInvoker(() => { ... }));
Run Code Online (Sandbox Code Playgroud)