调用最佳实践

时间:2013-02-10 12:07:14

标签: c#

每次我从除了创建元素之外的线程更新程序视图时,我都会使用:

if (this.table.InvokeRequired)
{
    this.table.Invoke(new MethodInvoker(delegate
    {
        this.table.Controls.Add(newRow);
        this.table.Controls.SetChildIndex(newRow, this.table.Controls.Count);
    }));
}
else
{
    this.table.Controls.Add(newRow);
    this.table.Controls.SetChildIndex(newRow, this.table.Controls.Count);
}

即使这种方法运行良好,但我怀疑这是最佳实践,因为

this.table.Controls.Add(newRow);
this.table.Controls.SetChildIndex(newRow, this.table.Controls.Count); 

与调用和不调用基本相同。

我有什么想法可以改善它吗?

2 个答案:

答案 0 :(得分:3)

您可以将其放在方法中,然后该方法可以自行调用:

public void addRow(Control newRow) {
  if (this.table.InvokeRequired) {
    this.table.Invoke(new MethodInvoker(addRow), new object[]{ newRow });
  } else {
    this.table.Controls.Add(newRow);
    this.table.Controls.SetChildIndex(newRow, this.table.Controls.Count);
  }
}

答案 1 :(得分:0)

语法可能不完全正确,但粗略地说:

delegate void myedelegate(<mystuff>)
void UpdateSomething(<mystuff>)
if(this.invokerequired)
{
    mydelegate updater = new mydeleate(UpdateSomething);
    updater.invoke(new object[]{<mystuff>})
}
else
{
    //doupdate
}

另外,请参阅http://www.codeproject.com/Articles/37642/Avoiding-InvokeRequired以获取有关调用所需做法的良好指南