2013-01-17 22 views
10

Stackoverflow'taki standart bir soru olmasına rağmen, anlayamadığım bir sorun yaşıyorum. Ben (bu eski Silverlight projesinden ve WPF çalışmak görünmüyor Hatırlatırım) Ben yanlış yapıyorumBir delege türü olmadığından, lambda ifadesini 'System.Delegate' türüne dönüştüremiyor musunuz?

_map.Dispatcher.BeginInvoke(() => 
{ 
    _map.Children.Clear(); 
    foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map))) 
    { 
     _map.Children.Add(projectedPin.GetElement(ClusterTemplate)); 
    } 
}); 

uyumsuz Aşağıdaki kodu kullanarak Bing Maps güncellemeye çalışıyorum

?

+6

'u kullanın Ve ne hakkında (Eylem) (() => ...) '? – acrilige

+0

@acrilige Teşekkürler! neden bunu cevap olarak yapmadın ???? –

cevap

30

You tekme System.Delegate dönüşüm için sırayla bir Action açık şekilde döküm zorunda

budur :

_map.Dispatcher.BeginInvoke((Action)(() => 
{ 
    _map.Children.Clear(); 
    foreach (var projectedPin in pinsToAdd.Where(pin => PointIsVisibleInMap(pin.ScreenLocation, _map))) 
    { 
     _map.Children.Add(projectedPin.GetElement(ClusterTemplate)); 
    } 
})); 
+5

İlginiz için, SLaks 'a yanıtı eklediğim yorumu görmek isteyebilirsiniz –

13

BeginInvoke() yönteminin parametresi, temel Delegate sınıftır.

Sadece bir lambda ifadesini somut bir temsilci türüne dönüştürebilirsiniz.

, açıkça bir temsilci oluşturmak gerekir bu sorunu düzeltmek için:.

BeginInvoke(new MethodInvoker(() => { ... })); 
+10

Az bilinen bir gerçektir: “ProcessInvoker” yerine 'Action' /' ThreadStart' yerine 'methodInvoker'ı kullanmak için * daha verimli * - imzası aynı olsa bile: Control.InvokeMarshaledCallbackDo'da direk destek vardır. '' '/ cast '' - diğer delege türlerinde' DynamicInvoke' kullanılır. Doğrudan desteklenen diğer delege türleri şunlardır: "WaitCallback" ve "EventHandler" –

2

deneyin

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

Ya da Eylem

+4

İlginiz için, SLaks'a eklediğim yorumu görmek isteyebilirsiniz 'answer –

+0

http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx: Temsilci, EventHandler'ın bir örneği olabilir, bu durumda gönderen parametresi bu denetimi içerir ve olay parametresi EventArgs.Empty içerir. Delege ayrıca, bir Method parametresini veya geçersiz bir parametre listesi alan başka bir temsilci de olabilir. EventHandler veya MethodInvoker temsilcisine yapılan çağrı, başka bir delege türüne yapılan çağrıdan daha hızlı olacaktır. – Alex

İlgili konular