Невозможно преобразовать лямбда-выражение в тип "System.Delegate", потому что это не тип делегата?
У меня проблема, которую я не могу понять, хотя это стандартный вопрос здесь в 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));
}
});
Что я делаю неправильно?
Ответы
Ответ 1
Вы должны явно указать его на 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));
}
}));
Ответ 2
Параметр метода BeginInvoke()
является базовым классом Delegate
.
Вы можете преобразовать только лямбда-выражение в конкретный тип делегата.
Чтобы устранить эту проблему, вам нужно явно создать делегат:
BeginInvoke(new MethodInvoker(() => { ... }));
Ответ 3
Попробуйте
Dispatcher.BeginInvoke(new System.Threading.ThreadStart(delegate
{
//Do something
}));
Или используйте Action