我有以下代码:
string message;
while (balloonMessages.TryDequeue(out message))
{
Console.WriteLine("Outside: {0}", message);
BeginInvoke((MethodInvoker)delegate()
{
Console.WriteLine("Inside: {0}", message);
});
}
Run Code Online (Sandbox Code Playgroud)
它给了我这个输出:
Outside: some_message
Inside:
Run Code Online (Sandbox Code Playgroud)
如何确保将某些局部变量BeginInvoke按预期传递给方法?
提前致谢.
您应该制作一个本地副本:
string message;
while (balloonMessages.TryDequeue(out message))
{
var localCopy = message;
Console.WriteLine("Outside: {0}", localCopy);
BeginInvoke((MethodInvoker)delegate()
{
Console.WriteLine("Inside: {0}", localCopy);
});
}
Run Code Online (Sandbox Code Playgroud)
这样,每次循环迭代它将始终是它自己的变量。