2009-02-06 5 views
0

L'objet parameterizedthreadstart a un objet enqueueworkem. Ceci (si je me souviens bien de mes méthodes et de leurs paramètres) prend un paramètre d'objet comme "état".Comment passer l'objet [] ou plusieurs objets à la méthode enqueueworkitem?

Cependant, quand j'ai une méthode qui a plusieurs paramètres d'objet (par exemple string, int qui sont des enfants d'objet), que puis-je faire pour passer tous ces paramètres dans la méthode enqueueworkitem? Aussi, que se passe-t-il si j'ai un objet [] et pas un paramètre d'objet?

Merci

Répondre

0

Vous pouvez toujours envelopper un certain nombre d'arguments dont vous avez besoin dans un type et passer une instance de cela.

+0

ou de les placer dans une liste <>. – JMD

+0

Merci. En fait, j'ai juste vu cette approche sur un fil similaire ici :) – dotnetdev

2

Il est parfaitement légal de passer un objet [] à une fonction qui prend un objet. Tout type est convertible en objet.

Dans la fonction appelée, il suffit de renvoyer le paramètre d'état à l'objet [] et vous êtes prêt à partir.

public void CallThreadPool(object[] arguments) { 
    ThreadPool.QueueUserWorkItem(new WaitCallBack(MyThreadProc), arguments); 
} 

public void MyThreadProc(object state) { 
    object[] data = (object[])state; 
} 
0

Personnellement, il faut éviter l ' « état » param - il perd la sécurité de type (la distribution est décochée par le compilateur). Les méthodes anonymes sont plus propres:

int foo =...; 
string bar =...; 
ThreadPool.QueueUserWorkItem(delegate { 
    YourMethod(foo,bar); 
}); 
Questions connexes