SORU
2 Mart 2010, Salı


InvokeRequired kodu desen otomatikleştirme

Bir olay güdümlü GUI kodu aşağıdaki kod desen yazmak gerekiyor sadece acılı bir şekilde haberdar oldum

private void DoGUISwitch() {
    // cruisin for a bruisin' through exception city
    object1.Visible = true;
    object2.Visible = false;
}

olur:

private void DoGUISwitch() {
    if (object1.InvokeRequired) {
        object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); }));
    } else {
        object1.Visible = true;
        object2.Visible = false;
    }
}

Bu C garip bir kalıptır#, hem de hatırlamak için, ve yazmak için. Herkes bir dereceye kadar bu otomatik bir çeşit kestirme yol ile gelip ya da inşa etti? Eğer object1.InvokeIfNecessary.visible = true tip bir kısayol gibi, tüm bu ekstra çalışma ile gitmek zorunda kalmadan bu denetimi yapar nesneleri için bir işlev eklemek için bir yolu varsa çok iyi olurdu.

answers sadece Çağırmak çağıran impracticality tartıştık önceki() her zaman, ve o zaman bile Çağırmak() sözdizimi, hem de verimsizhalagarip bir durum ile başa çıkmak için.

Herkes kestirme bir yol buldu?

CEVAP
2 Mart 2010, Salı


Uzantısı yöntemi yazabilirsiniz:

public static void InvokeIfRequired(this Control c, Action<Control> action)
{
    if(c.InvokeRequired)
    {
        c.Invoke(new Action(() => action(c)));
    }
    else
    {
        action(c);
    }
}

Ve aşağıdaki gibi kullanabilirsiniz:

object1.InvokeIfRequired(c => { c.Visible = true; });

Simpzon de imza değiştir şunu fark yorum puan: DÜZENLEME:

public static void InvokeIfRequired<T>(this T c, Action<T> action) 
    where T : Control

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dhcrr's channel

    dhcrr's chan

    2 Ocak 2007
  • fireflame65

    fireflame65

    27 Mart 2007
  • SegaAmerica

    SegaAmerica

    5 Mart 2008