Commencer un nouveau thread dans une boucle foreach

J'ai une Liste d'objets, et j'aimerais faire une boucle sur la liste et commencer un nouveau fil, le passer dans l'objet courant.

J'ai écrit un exemple de ce que je pensais faire ceci, mais ça ne fonctionne pas. Plus précisément, il semble que les fils sont écrasés à chaque itération. Ce n'est pas vraiment de sens pour moi si, car je suis en train de faire un nouvel objet Thread à chaque fois.

C'est le test de code que j'ai écrit

class Program
{
    static void Main(string[] args)
    {
        TestClass t = new TestClass();
        t.ThreadingMethod();
    }
}

class TestClass
{
    public void ThreadingMethod()
    {
        var myList = new List<MyClass> { new MyClass("test1"), new MyClass("test2") };

        foreach(MyClass myObj in myList)
        {
            Thread myThread = new Thread(() => this.MyMethod(myObj));
            myThread.Start();
        }
    }

    public void MyMethod(MyClass myObj) { Console.WriteLine(myObj.prop1); }
}

class MyClass
{
    public string prop1 { get; set; }

    public MyClass(string input) { this.prop1 = input; }
}

La sortie sur ma machine est

test2
test2

mais je m'attendais à être

test1
test2

J'ai tenté de changer le fil des lignes à

ThreadPool.QueueUserWorkItem(x => this.MyMethod(myObj));

mais aucun des threads commencé.

Je pense que j'ai juste un malentendu au sujet de la façon dont les threads sont censés travailler. Quelqu'un peut me pointer dans la bonne direction et dites-moi ce que je fais mal?

InformationsquelleAutor Kris Harper | 2012-02-23