C# 在异步委托调用中发送可选参数

C# 在异步委托调用中发送可选参数,c#,delegates,C#,Delegates,这是我的代表签名: public delegate PrintAllergyClass AllergiesDelegate( long patientAccount, long chartId, bool isCf, string practiceCode = ""); public PrintAllergyClass LoadAllergyPrintData( long PAcc, long ChartID, bool Is_CF, string PracticeCode="

这是我的代表签名:

public delegate PrintAllergyClass AllergiesDelegate(
    long patientAccount, long chartId, bool isCf, string practiceCode = "");
public PrintAllergyClass LoadAllergyPrintData(
    long PAcc, long ChartID, bool Is_CF, string PracticeCode="")
我这样称呼它:

AllergiesDelegate allergies = new AllergiesDelegate(
    GetChartFacadeObj().LoadAllergyPrintData);
IAsyncResult Allergies = allergies.BeginInvoke(
    long.Parse(patientAccount), long.Parse(chartID), Is_CF, null, null);
这是函数签名:

public delegate PrintAllergyClass AllergiesDelegate(
    long patientAccount, long chartId, bool isCf, string practiceCode = "");
public PrintAllergyClass LoadAllergyPrintData(
    long PAcc, long ChartID, bool Is_CF, string PracticeCode="")
但它给了我一个错误:

方法“BeginInvoke”没有重载包含5个参数

在intellisense上,它按预期显示所需的参数


请指导我如何处理此案件?

Intellisense向您展示了如何称呼该代表:

可以提供另外两个基础结构参数。代理签名中的可选参数不会传输到代理的
BeginInvoke
方法

    public delegate object AllergiesDelegate(
        long patientAccount, long chartId, bool isCf, string practiceCode = "");

    static void Main(string[] args)
    {
        AllergiesDelegate allergies = null;
        IAsyncResult Allergies = allergies.BeginInvoke(0, 0, false, "", null, null);
    }

看看intellisense,看看什么是allergies.BeginInvoke期望的。然后给出它所期望的。除了问题的重点,但您可能应该使用
Task
,而不是基于线程池的APM模型。@usr..在intellisense上,它显示了所需的参数,practiceCode为optional@usr..i我无法查看图像,你能详细说明一下或者给我一段代码吗…那
EndInvoke
呢?您总是在
BeginInvoke
之后调用
EndInvoke
,以便进行任何必要的清理。@Aron我同意,但怎么办?只要在您喜欢的任何时候调用EndInvoke即可。问题不在于此。-1现在您是a)丢弃结果b)试图在调用开始之前获得结果。@Aron这根本不是问题的重点。这是演示代码。在你看来,这个问题的重点是什么?