2011-07-25 5 views
2

Je fais de simples mises à jour de GUI sur une minuterie. Quelle méthode est préférable d'utiliser si je mets à jour un seul contrôle? MethodInvoker comme ceci:MethodInvoker vs Control.Invoke

this.Invoke((MethodInvoker)delegate 
{ 
    systemMode.Text = systemMode.ToString(); 
}); 

ou créer un contrôle invoquer comme ceci:

public void UpdateSystemMode() 
{ 
    if (systemMode.InvokeRequired) 
    { 
     UpdateSystemMode.Invoke(new 
      UpdateSystemModeDelegate(UpdateSystemMode)); 
    } 
    else 
    { 
     systemMode.UpdateSystemMode(); 
    } 
} 

De toute évidence, la méthode invocateur a moins de code à l'avant, mais on est la meilleure pratique?

Répondre

2

UpdateSystemMode.Invoke(new UpdateSystemModeDelegate(UpdateSystemMode));

et

this.Invoke((MethodInvoker)delegate 
{ 
    systemMode.Text = systemMode.ToString(); 
}); 

est tout à fait même ainsi que

this.Invoke((Action)(()=> systemMode.Text = systemMode.ToString())); 

droit chemin:

public void UpdateSystemMode() 
{ 
    if (this.InvokeRequired) 
     this.BeginInvoke((Action)UpdateSystemMode); 
    else 
     systemMode.UpdateSystemMode(); 
} 
+0

Merci pour la réponse. Votre dernière ligne avait besoin du premier ';' retiré, cependant. – Jason

+0

Attention, 'BeginInvoke' a une sémantique différente de' Invoke'! Et 'Control.Invoke' est censé être plus rapide si vous utilisez le type de délégué' MethodInvoker' plutôt que 'Action'. – Sven

+0

@Sven, quelle est la différence entre la méthode Action et MethodInvoker for Invoke? O_o ils sont tous les deux sans paramètre et ont un type de retour vide. – Nagg

Questions connexes