2014-09-24 70 views
1

這裏是我的委託簽名:發送可選的參數在異步委託調用

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

這是我如何稱呼它:

AllergiesDelegate allergies = new AllergiesDelegate(
    GetChartFacadeObj().LoadAllergyPrintData); 
IAsyncResult Allergies = allergies.BeginInvoke(
    long.Parse(patientAccount), long.Parse(chartID), Is_CF, null, null); 

下面是函數簽名:

public PrintAllergyClass LoadAllergyPrintData(
    long PAcc, long ChartID, bool Is_CF, string PracticeCode="") 

但它給我的錯誤:

No overload for method 'BeginInvoke' takes 5 arguments.

在智能感知,它顯示所需的參數如預期。

請親引導我,如何處理這種情況?

+0

看看intellisense看什麼過敏.BeginInvoke期望。然後給出它的期望。 – usr 2014-09-24 08:20:51

+0

除了問題的關鍵點之外,您應該使用'Task'而不是基於線程池的APM模型。 – usr 2014-09-24 08:21:36

+0

@ usr ..在intellisense它顯示所需的參數,與practiceCode作爲可選 – 2014-09-24 08:28:01

回答

1

智能感知顯示您如何調用該委託:

enter image description here

有可以提供兩個額外的基礎設施參數。委託簽名中的可選參數不會轉移給委託人的方法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); 
    } 
+0

@ usr ..我無法查看圖像,請你詳細說明或給我一塊代碼... – 2014-09-24 08:48:25

+0

怎麼樣'EndInvoke '?您總是在'BeginInvoke'後面調用'EndInvoke',以便進行必要的清理。 – Aron 2014-09-24 08:50:31

+0

@Aron我同意,但是呢?只需在任何你喜歡的地方調用EndInvoke。問題不在於此。 – usr 2014-09-24 08:53:12