2010-09-15 111 views
14

下面的代碼塊會導致錯誤:TargetParameterCountException未被用戶代碼處理。參數計數不匹配。參數計數與調用不匹配?

public void AddListViewItem(string[] Data) 
    { 
     if (InvokeRequired) 
     { 
      Invoke(new Action<string[]>(AddListViewItem), Data); 
     } 
     else 
     { 
      ListViewData.Items.Add(Data[0]).SubItems.AddRange 
      (
       new string[] 
       { 
        Data[1], 
        Data[2], 
        Data[3], 
       } 
      ); 
     } 
    } 

任何想法?

+0

「AddListViewItem」的簽名是什麼? – 2010-09-15 21:09:06

+0

就在那裏。他正在遞歸地調用它。 – BFree 2010-09-15 21:10:58

+1

確保接受解決您的問題的答案。 – BFree 2010-09-15 21:13:05

回答

24

由於陣列協方差而發生錯誤;字符串數組可指定給object[]。這會導致Invoke方法將string數組的每個元素視爲應該是AddListViewItem方法的參數。

這裏的一個修復:

Invoke(new Action<string[]>(AddListViewItem), new object[] {Data}); 

(或)

Invoke(new Action<string[]>(AddListViewItem), (object)Data); 

這使得清澈到Invoke目標方法以一個單一參數

+0

完美!謝謝! – sooprise 2010-09-15 21:10:39

+0

@Ani,你能解釋什麼是數組協變?以一個例子更好。謝謝。 – smwikipedia 2013-04-18 16:00:23

+0

謝謝!這讓我瘋狂。你的第一個例子適合我的情況。我正在傳遞一個對象數組,但是這個invoke方法不夠智能來處理它。例子... '.Invoke(mysource,new object [] {m​​yobjectarray});'' – 2015-07-02 15:51:34

0

更新信息:

如果您使用的Windows Server 2008 R2的,看看Windows更新爲.Net框架4.5.1基於Windows Server 2008 R2 x64系統KB2858725。對於我來說,安裝此更新後解決了這個問題。