这是我第一次在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);
}
.................
哪种方式正确?
答案 0 :(得分:1)
说实话,我只是用
BeginInvoke((MethodInvoker)delegate {
UpdateSales(numbersale);
});
那样:
还不清楚异步方法会做什么;添加两个数字是矫枉过正,例如。您可能需要考虑线程安全性和线程关联性。
答案 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上的属性。