Je viens de commencer à jouer avec du filetage aujourd'hui et j'ai rencontré quelque chose que je ne comprends pas.Lancer un thread à partir d'une boucle et passer l'ID de boucle
public void Main()
{
int maxValue = 5;
for (int ID = 0; ID < maxValue; ID++)
{
temp(ID);
}
}
public void temp(int i)
{
MessageBox.Show(i.ToString());
}
Comme base qu'il obtient qui fonctionne très bien, mais lorsque je tente de créer un nouveau fil pour chacun, il ne passe que valeurmax. S'il vous plaît ne tenez pas compte de la gravité de cette situation, je l'ai seulement écrit comme un exemple simpliste.
public void Main()
{
int maxValue = 5;
for (int ID = 0; ID < maxValue; ID++)
{
threads.Add(new Thread(() => temp(myString, rowID)));
threads[rowID].Start();
}
}
public void temp(string myString, int i)
{
string _myString = myString;
MessageBox.Show(i.ToString());
}
Compte tenu de cela, j'ai deux questions: 1) Pourquoi la méthode ne marche pas un se fait appel à un nouveau thread qui passe l'ID? 2) Comment devrait-il être correctement codé?
bien d'abord, vous avez une variable rowID non déclarée. Renommez les deux occurrences en ID et cela fonctionnera ALL DROIT. La réponse ci-dessous est OBSOLÈTE! – mnn
rowID est une faute de frappe .. si cela est changé en ID, cela ne fonctionne pas. La réponse de Jons est correcte. –
@mnn: Non, ce ne sera pas le cas. À quel point êtes-vous familier avec la manière dont les variables capturées fonctionnent en C#? –