Anonim yöntemi Çağırır
Bir temsilci Denetimi içinde isimsiz bir çağrı olmasını istiyoruz sözdizimi ile bir sorunu.Çağırmak.
Farklı yaklaşımlar bir dizi, hepsi boşuna çalıştık.
Örneğin:
myControl.Invoke(delegate() { MyMethod(this, new MyEventArgs(someParameter)); });
nerede someParameter bu yöntem için yerel
Yukarıda bir derleyici hatası neden olur:
Yazamaz anonim yöntem 'System.convert Temsilci,' bir temsilci türü değil çünkü
CEVAP
Çünkü Invoke
/BeginInvoke
kabul Delegate
(yerine bir daktilo temsilci), söylemen gerek derleyici ne tür bir temsilci oluşturmak için ; MethodInvoker
(2.0) veya Action
(3.5) genel seçimler (not aynı imza); bunun gibi
control.Invoke((MethodInvoker) delegate {this.Text = "Hi";});
Eğer parametre geçmek, sonra da "değişken" yolu vardır: . yakalanan ihtiyacınız varsa
string message = "Hi";
control.Invoke((MethodInvoker) delegate {this.Text = message;});
(uyarı: eğer görüntüleri kullanarak . biraz dikkatli olmak gerekir ^em>zaman uyumsuzamasyncince ince yani yukarıdaki)
Başka bir seçenek bir uzantı yöntemi yazma
public static void Invoke(this Control control, Action action)
{
control.Invoke((Delegate)action);
}
sonra:
this.Invoke(delegate { this.Text = "hi"; });
// or since we are using C# 3.0
this.Invoke(() => { this.Text = "hi"; });
Elbette BeginInvoke
ile aynı şeyi yapabilirsiniz:
public static void BeginInvoke(this Control control, Action action)
{
control.BeginInvoke((Delegate)action);
}
EÄŸer C kullanabilirsiniz.# 3.0, muhtemelen Form
taban sınıf bir düzenli örnek bir yöntem ile aynı olabilir.
'in nesi geçersiz kılınabilir kur...
Neden yok C# statik bir yöntem bir örn...
'Eclipse içine bir proje aldıktan...
Nasıl yansıması genel bir Yöntemi çağı...
JavaScript kapatma vs anonim fonksiyon...