2013-02-13 11 views
5

Próbuję utworzyć nowy wątek i przekazać metodę z parametrem, ale błędy są poza nią.Tworzenie nowego wątku za pomocą metody z parametrem

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

public void myMethod(UltraGrid myGrid) 
{ 
} 

--------- błędy ------------

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

Chyba powinniśmy się domyślić, który błąd dostaniesz? ** Dołącz błąd, który otrzymasz w swoim pytaniu! ** – ThiefMaster

+0

Czy posiadasz więcej niż jedną metodę o nazwie 'myMethod' w swojej klasie? –

Odpowiedz

10

Zmień inicjalizacji wątek do:

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

I także sposób na:

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

To match the ParameterizedThreadStart delegate signature.

+1

Nie ma potrzeby używania 'ParameterizedThreadStart' w ogóle, ponieważ można wywnioskować odpowiedni typ delegata. Wystarczy więc zmienić parametr 'myGrid' na' object'. – sloth

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


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

To jest miłe, ale co, jeśli myMethod coś zwróci? Jakie zmiany należy wprowadzić w odniesieniu do kodu? –

18

bardziej wygodny sposób przekazać parametry do metody przy użyciu wyrażeń lambda lub metod anonimowych, dlaczego, bo można przekazać metodę z liczbą parametrów potrzebuje. ParametryzowanyThreadStart jest ograniczony do metod tylko z JEDNYM parametrem.

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

public void myMethod(UltraGrid myGrid) 
{ 
} 

jeśli miał metoda jak

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

Ów wielki książka do czytania!

+0

Dzięki, Pomógł mi. – Sak

Powiązane problemy