c#delegate:我正确使用它吗?

时间:2010-10-03 10:37:57

标签: c# delegates

这是我第一次在c#应用程序中使用委托。有人可以检查我是否正确使用它。

int totalsales = 0;

adddata(){ 
........ 
BeginInvoke(new UpdateSalesDelegate(UpdateSales), numbersale);

}

private delegate void UpdateSalesDelegate(int  args);

private void UpdateSales(int args){ 
totalsales = totalsales + args; 
Label.Text = "Total Sales: " + totalsales.ToString();

}

或者我应该使用

    adddata(){ 
    ........ 
    BeginInvoke(new UpdateSalesDelegate(UpdateSales), new int numbersale);

    }
.................

哪种方式正确?

3 个答案:

答案 0 :(得分:1)

说实话,我只是用

BeginInvoke((MethodInvoker)delegate {
    UpdateSales(numbersale);
});

那样:

  • 无需声明委托类型
  • 静态类型检查
  • MethodInvoker有特殊的检测/处理,所以稍快(不多)

还不清楚异步方法会做什么;添加两个数字是矫枉过正,例如。您可能需要考虑线程安全性和线程关联性。

答案 1 :(得分:1)

您可以使用action代表。这样您就不必每次都指定自己的代理。

void AddData()
{
    BeginInvoke(new Action<int>(UpdateSales), numbersale);
}    

void UpdateSales(int args)
{

}

答案 2 :(得分:0)

Label.Text = "Total Sales: " + totalsales.ToString(); 

此代码很可能会失败,因为BeginInvoke()在新线程上异步调用委托,并且需要在UI线程上更新Label上的属性。