2013-02-13 4 views
5

J'essaie de créer un nouveau thread et de passer une méthode avec un paramètre, mais des erreurs se produisent.Création d'un nouveau thread avec la méthode avec le paramètre

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

public void myMethod(UltraGrid myGrid) 
{ 
} 

erreurs ------------ ---------

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

Je suppose que nous devrions deviner quelle erreur vous obtenez? ** S'il vous plaît inclure l'erreur que vous obtenez dans votre question! ** – ThiefMaster

+0

Avez-vous plus d'une méthode appelée 'myMethod' dans votre classe? –

Répondre

10

Changer l'initialisation de votre fil à:

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

Et également la méthode pour:

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

To match the ParameterizedThreadStart delegate signature.

+1

Il n'est pas nécessaire d'utiliser 'ParameterizedThreadStart', car le type de délégué approprié peut être déduit. Il suffit donc simplement de changer le paramètre 'myGrid' en' object'. – sloth

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


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

C'est bien, mais que se passe-t-il si myMethod retourne quelque chose? Quels changements dois-je faire au code? –

18

Une façon plus commode de passer des paramètres à la méthode utilise des expressions lambda ou des méthodes anonymes, pourquoi parce que vous pouvez passer la méthode avec le nombre de paramètres dont il a besoin. ParameterThreadStart est limité aux méthodes avec un seul paramètre.

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

public void myMethod(UltraGrid myGrid) 
{ 
} 

si vous aviez une méthode comme

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

Thats grand livre à lire!

+0

Merci, m'a aidé. – Sak

Questions connexes