2013-02-13 23 views
5

Sto cercando di creare un nuovo thread e passare un metodo con parametro, ma errori out.Creazione di un nuovo thread con metodo con il parametro

Thread t = new Thread(myMethod); 
t.Start(myGrid); 

public void myMethod(UltraGrid myGrid) 
{ 
} 

errori --------- ------------

Error: CS1502 - line 92 (164) - The best overloaded method match for ' System.Threading.Thread.Thread(System.Threading.ThreadStart) ' has some invalid arguments

Error: CS1503 - line 92 (164) - Argument '1': cannot convert from 'method group' to ' System.Threading.ThreadStart '

+5

Immagino che dovremmo indovinare quale errore si ottiene? ** Si prega di includere l'errore che si ottiene nella tua domanda! ** – ThiefMaster

+0

Hai più di un metodo chiamato 'myMethod' nella tua classe? –

risposta

10

Cambia la tua inizializzazione thread per:

var t = new Thread(new ParameterizedThreadStart(myMethod)); 
t.Start(myGrid); 

E anche il metodo per:

public void myMethod(object myGrid) 
{ 
    var grid = (UltraGrid)myGrid; 
} 

To match the ParameterizedThreadStart delegate signature.

+1

Non è necessario utilizzare 'ParameterizedThreadStart', poiché è possibile dedurre il tipo di delegato appropriato. Quindi basta cambiare il parametro 'myGrid' in' object'. – sloth

0
public void myMethod(object myGrid) 
    { 
     var typedParam = (UltraGrid)myGrid; 
     //... 
    } 


    Thread t = new Thread(new ParameterizedThreadStart(myMethod)); 
    t.Start(myGrid); 
+0

Questo è pulito, ma cosa succede se myMethod restituisce qualcosa? Quali modifiche dovrei fare per il codice? –

18

un modo più conveniente per passare parametri a metodo sta usando le espressioni lambda o metodi anonimi, perché, perché si può passare il metodo con il numero di parametri di cui ha bisogno. ParameterizedThreadStart è limitato ai metodi con un solo parametro.

Thread t = new Thread(()=>myMethod(myGrid)); 
t.Start(); 

public void myMethod(UltraGrid myGrid) 
{ 
} 

se si ha un metodo come

public void myMethod(UltraGrid myGrid, string s) 
{ 
} 

Thread t = new Thread(()=>myMethod(myGrid, "abc")); 
t.Start(); 

http://www.albahari.com/threading/#_Passing_Data_to_a_Thread

Quello è un grande libro da leggere!

+0

Grazie, mi ha aiutato. – Sak

Problemi correlati