この番組について質問があります。正しい結果が得られません。+ 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; }
}