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

  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009
  • Machinima

    Machinima

    17 Ocak 2006
  • JeezyVEVO

    JeezyVEVO

    12 Mayıs 2009