0

この番組について質問があります。正しい結果が得られません。+ 1 + 2 - 1 + 3 - 2 + 4 - 3 + 5 - 4 - 5 (注文固有ではありません) のような出力が得られると思います。ただし、+ 1 + 2 - 2 + 3 - 3 + 4 - 4 + 5 - 5 - 5 を出力します。

コピーしたら

MyStructure msCopy = ms;
Thread t = new Thread(() => { updateMe(msCopy); });

正しい値を出力します。私は.net 3.5を使用しています。理由は何ですか?

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        p.createThread();
    }

    List<MyStructure> structure = new List<MyStructure>();

    public void createThread()
    {
        foreach (MyStructure ms in structure)
        {
            System.Diagnostics.Debug.WriteLine("+ " + ms.ID);
            //MyStructure msCopy = ms;
            //Thread t = new Thread(() => { updateMe(msCopy); });
            Thread t = new Thread(() => { updateMe(ms); });
            t.Start();
        }

    }

    private void updateMe(MyStructure ms)
    {
        System.Diagnostics.Debug.WriteLine("- " + ms.ID);
    }

    public Program()
    {
        structure.Add(new MyStructure { ID = 1, Name = "A" });
        structure.Add(new MyStructure { ID = 2, Name = "B" });
        structure.Add(new MyStructure { ID = 3, Name = "C" });
        structure.Add(new MyStructure { ID = 4, Name = "D" });
        structure.Add(new MyStructure { ID = 5, Name = "E" });
    }
}

internal class MyStructure
{
    public int ID { get; set; }
    public String Name { get; set; }
}
4

0 に答える 0