2011-07-25 26 views
2

私はタイマーで簡単なGUIアップデートをしています。単一のコントロールを更新する場合、どちらの方法を使用するのが良いですか?このようなMethodInvoker:MethodInvokerとControl.Invoke

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

またはコントロールを作成するには、次のように呼び出す:

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

、メソッドの呼び出しは、アップフロントより少ないコードを持っていますが、どちらがベストプラクティスですか?応答のための

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

答えて

2

UpdateSystemMode.Invoke(new UpdateSystemModeDelegate(UpdateSystemMode));

は絶対に 同じだけでなく、

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

正しい方法です。最後の行には最初の ';'が必要でした。しかし、削除されました。

+0

ありがとう:

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

Jason

+0

'BeginInvoke'は' Invoke'とは異なるセマンティクスを持っていることに注意してください!また、 'Action'ではなく' MethodInvoker'デリゲート型を使うと、 'Control.Invoke'はおそらく速くなります。 – Sven

+0

@Sven、InvokeメソッドのActionとMethodInvokerの違いは何ですか? O_oでは、両方ともパラメータがなく、戻り値の型としてvoidを持ちます。 – Nagg

関連する問題