2010-04-15 5 views
1

Comment est-ce que je passerais quelques paramètres à un nouveau fil qui exécute une fonction d'une autre classe? Ce que j'essaie de faire est de passer un tableau ou plusieurs variables à une fonction qui se trouve dans une autre classe et son appelé par un nouveau thread.C# 4.0 comment passer des variables aux threads?

i ont essayé de le faire comme ça>

Functions functions = new Functions(); 

    string[] data; 

    Thread th = new Thread(new ParameterizedThreadStart(functions.Post())); 

    th.Start(data); 

mais il montre une erreur "Aucune surcharge pour la méthode 'Post' a 0 arguments"

Des idées?

+0

s'il vous plaît noter que le vrai problème avec votre code est que vous appelez la méthode Post au lieu de le transmettre dans le constructeur délégué. Vous devez omettre les parenthèses après functions.Post() et cela va compiler. – Marek

Répondre

9

Puisque vous avez ce battant pavillon C# 4, la nouvelle approche serait:

Functions functions = new Functions(); 

string[] data = GetData(); 

Task.Factory.StartNew(() => functions.Post(data)); 

Si vous voulez vraiment laisser cela en utilisant un thread dédié, et non la bibliothèque parallèle de tâches, vous pouvez. Compte tenu de vos commentaires, il semble que Post() est probablement défini comme Post(string[] data). Cela ne fonctionnera pas puisque ParameterizedThreadStart s'attend à ce que la méthode soit Post(object data).

Vous pouvez contourner ce via lambdas et en utilisant ThreadStart au lieu de ParameterizedThreadStart, cependant, sans changer vos méthodes:

Functions functions = new Functions(); 
string[] data = GetData(); 
Thread th = new Thread(() => 
    { 
     functions.Post(data); 
    }); 
th.Start(); 
2

La réponse directe est:

new Thread(new ParameterizedThreadStart(functions.Post/*(remove)*/)); 

et Functions.Post devrait être de la forme:

void Post(object state) { string[] data = (string[]) state; .... } 

Si vous avez déjà un fixe void Post(string[] data) vous pouvez ajouter un emballage à la classe Fonctions:

void Post2(object state) { Post((string[]) state); } 

Mais lorsque vous utilisez Fx4, vous devriez vraiment jeter un oeil à la tâche l la bibliothèque

+0

maintenant je reçois "Pas de surcharge pour les messages 'Post' délégué 'System.Threading.ParameterizedThreadStart'" – Aviatrix

+1

@Aviatrix: Pouvez-vous poster votre code (ou au moins le sig.) Pour functions.Post()? –

+0

@Aviatrix, j'étais encore en train d'éditer un peu, peut-être que la dernière version aide. Mais je suis avec Reed ici, s'il vous plaît poster les grandes lignes. –

Questions connexes