使用BeginInvoke方法时如何确保局部变量的正确状态

Fro*_*art 9 c# winforms

我有以下代码:

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按预期传递给方法?

提前致谢.

nvo*_*igt 4

您应该制作一个本地副本:

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)

这样,每次循环迭代它将始终是它自己的变量。