C# 不重载匹配的委托';系统行动';

C# 不重载匹配的委托';系统行动';,c#,action,C#,Action,我不知道如何为new Action()提供可选参数 我尝试了新操作(UpdateDataGrid),但仍然抛出运行时错误 谢谢您需要创建一个封装方法调用的方法委托,传递最初指定的参数,如下所示: public void UpdateDataGrid(bool newInsert = false) { //ThreadSafe (updating datagridview from AddEventForm is not allowed otherwise

我不知道如何为new Action()提供可选参数

我尝试了新操作(UpdateDataGrid),但仍然抛出运行时错误


谢谢

您需要创建一个封装方法调用的方法委托,传递最初指定的参数,如下所示:

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,其最终结果几乎是一个委托