不能将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));
}
});
我做错了什么?
您必须显式地将其强制转换为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