Anonim yöntemi Çağırır | Netgez.com
SORU
31 EKÄ°M 2008, Cuma


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
31 EKÄ°M 2008, Cuma


Çü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.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • vgeller1

    vgeller1

    22 Kasım 2009