17

私は理解できないように見える問題を抱えていますが、これは Stackoverflow での標準的な質問のようなものです。

次のコードを使用して Bing Maps を非同期的に更新しようとしています (注意してください、これは古い 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));
    }
});

私は何を間違っていますか?

4

3 に答える 3

41

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));
    }
}));
于 2013-01-17T14:18:10.603 に答える
14

メソッドのBeginInvoke()パラメーターは基底Delegateクラスです。

ラムダ式は具体的なデリゲート型にのみ変換できます。

この問題を修正するには、デリゲートを明示的に作成する必要があります。

BeginInvoke(new MethodInvoker(() => { ... }));
于 2013-01-17T14:18:10.040 に答える
3

試す

Dispatcher.BeginInvoke(new System.Threading.ThreadStart(delegate
{
//Do something
}));

またはアクションを使用

于 2013-01-17T14:21:12.627 に答える