C# 不重载匹配的委托';系统行动';
我不知道如何为new Action()提供可选参数 我尝试了新操作(UpdateDataGrid),但仍然抛出运行时错误C# 不重载匹配的委托';系统行动';,c#,action,C#,Action,我不知道如何为new Action()提供可选参数 我尝试了新操作(UpdateDataGrid),但仍然抛出运行时错误 谢谢您需要创建一个封装方法调用的方法委托,传递最初指定的参数,如下所示: public void UpdateDataGrid(bool newInsert = false) { //ThreadSafe (updating datagridview from AddEventForm is not allowed otherwise
谢谢您需要创建一个封装方法调用的方法委托,传递最初指定的参数,如下所示:
public void UpdateDataGrid(bool newInsert = false)
{
//ThreadSafe (updating datagridview from AddEventForm is not allowed otherwise
if (InvokeRequired)
{
Invoke(new Action(UpdateDataGrid));
}
else
{
Util.PopulateDataGridView(ref this.EventsDataGridView,newInsert);
}
}
在这方面:
() => UpdateDataGrid(newInsert)
您需要创建一个封装方法调用的方法委托,传递最初指定的参数,如下所示:
public void UpdateDataGrid(bool newInsert = false)
{
//ThreadSafe (updating datagridview from AddEventForm is not allowed otherwise
if (InvokeRequired)
{
Invoke(new Action(UpdateDataGrid));
}
else
{
Util.PopulateDataGridView(ref this.EventsDataGridView,newInsert);
}
}
在这方面:
() => UpdateDataGrid(newInsert)
为什么不使用泛型异常?首先,它是跨线程异常吗?不,它不会引发跨线程异常。它抱怨参数不匹配为什么不使用泛型?首先,它是跨线程异常吗?不,它不会引发跨线程异常。它抱怨参数不匹配,谢谢你。不使用lambdas可以完成吗?如果没有参数调用(新操作(UpdateTagRid)工作,为什么这一个不工作调用(新操作(UpdateTagRid(newInsert))@Marin您可以用相应的delegates替换任何lambda表达式。对于无参数方法,它不使用lambdas工作,因为
UpdateTagRid
表示方法委托(即“指针”)注意末尾缺少的()
。UpdateDataGrid(newInsert)
,另一方面,表示对该方法的调用。换句话说:UpdateDataGrid
相当于()=>UpdateDataGrid()
,而不是UpdateDataGrid()
。谢谢你的最后一条评论。从某种意义上说()=>UpdateDataGrid()是一个lambda,它的最终结果几乎是一个委托人。谢谢你,它可以工作。不使用lambdas就可以完成吗?如果没有参数调用(新操作(UpdateDataGrid)可以工作,为什么这一个不能工作调用(新操作(UpdateDataGrid(newInsert))@Marin您可以将任何lambda表达式替换为其相应的delegates。对于无参数方法,它不使用lambda,因为UpdateDataGrid
表示方法委托(即指向方法的“指针”);请注意末尾缺少的()
。UpdateDataGrid(newInsert)另一方面,
表示方法的调用。换句话说:UpdateDagRid
相当于()=>UpdateDagRid()
,而不是UpdateDagRid()
。感谢最后的注释。因此从某种意义上说()=>UpdateDagRid()是一个lambda,其最终结果几乎是一个委托