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

  • AyfionGaming

    AyfionGaming

    20 ŞUBAT 2013
  • brokenbellsVEVO

    brokenbellsV

    11 EYLÜL 2009
  • MisterBrightside

    MisterBright

    24 Mart 2006