MethodInvoker vs Control.Invoke

时间:2011-07-25 12:52:49

标签: c# multithreading invoke

我正在对计时器进行简单的GUI更新。如果我更新单个控件,哪种方法更好用? MethodInvoker是这样的:

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

或创建一个这样的控件调用:

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

显然,方法调用者预先有较少的代码,但哪一个是最佳实践?

1 个答案:

答案 0 :(得分:2)

UpdateSystemMode.Invoke(new UpdateSystemModeDelegate(UpdateSystemMode));

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

绝对一样 以及

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

正确的方式:

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