Невозможно преобразовать лямбда-выражение в тип "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