我有这段代码,它可以按我的意愿工作,但我不明白为什么。考虑 C、C++ 中的堆栈,我猜 p 变量将在每次调用时位于堆栈上,然后在方法返回时被擦除。线程的闭包如何捕获它,并且每次都捕获正确的值?输出是我想要的——文件是“_a”、“_b”、“_c”。
public enum enumTest
{
a = 1,
b =2,
c=3
}
private void Form1_Load(object sender, EventArgs e)
{
callme(enumTest.a);
callme(enumTest.b);
callme(enumTest.c);
}
private void callme(enumTest p)
{
Thread t = new Thread(() =>
{
Thread.Sleep(2000);
Guid guid = Guid.NewGuid();
File.WriteAllText(guid.ToString() + "_" + p.ToString(), "");
});
t.Start();
}