2010-09-15 11 views
14

Il blocco di codice sottostante genera l'errore: TargetParameterCountException non è stato gestito dal codice utente. Mancata corrispondenza del conteggio dei parametri.Mancata corrispondenza del conteggio dei parametri con Invoke?

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], 
       } 
      ); 
     } 
    } 

Qualche idea?

+0

Qual è la firma di "AddListViewItem'? –

+0

È proprio lì. Lo sta chiamando in modo ricorsivo. – BFree

+1

Accertati di accettare la risposta che ha risolto il tuo problema. – BFree

risposta

24

L'errore si verifica a causa della covarianza dell'array; una serie di stringhe è assegnabile a object[]. Ciò causa il metodo Invoke per il trattamento di ciascun elemento dell'array string come se fosse un argomento per il metodo AddListViewItem.

Ecco una correzione:

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

(o)

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

Ciò rende cristallino a Invoke che il metodo di destinazione richiede un unico parametro .

+0

Perfetto! Grazie! – sooprise

+0

@Ani, potresti spiegare cos'è la covarianza dell'array? meglio con un esempio. Grazie. – smwikipedia

+0

Grazie! Questo mi stava facendo impazzire. Il tuo primo esempio ha funzionato bene nella mia situazione. Stavo passando un array di oggetti, ma il metodo invoke non è abbastanza intelligente per gestirlo così com'è. Esempio ... '.Invoke (mysource, new object [] {myobjectarray});' –

0

aggiornamento:

Se si utilizza Windows Server 2008 R2, date un'occhiata a Windows Update per Net Framework 4.5.1 per 2008 sistemi basati R2 x64 KB2858725 Windows Server. Per me, dopo aver installato questo aggiornamento risolto questo problema.

Problemi correlati