C# 在调用内部使用Foreach循环

C# 在调用内部使用Foreach循环,c#,winforms,invoke,C#,Winforms,Invoke,不要介意GameObject之类的变量。这些是我的自定义变量。 我有一个线程,需要访问UI线程中的列表变量。 public void MainLoop(){ while (true) { this.Invoke(new MethodInvoker(() => foreach(GameObject ob in mygame.scenes[CurrentScene].objects){

不要介意GameObject之类的变量。这些是我的自定义变量。

我有一个线程,需要访问UI线程中的列表变量。

public void MainLoop(){
        while (true)
        {
            this.Invoke(new MethodInvoker(() =>


            foreach(GameObject ob in mygame.scenes[CurrentScene].objects){

              //run code here

            }


            ));
        }

    }

这将抛出错误,“}应为”。我似乎不知道如何解决这个问题。有人知道如何在控件调用中运行foreach循环吗?

您只需要另外一组{}。在这里,您的代码是格式化的,所以添加大括号后可读

public void MainLoop()
{
  while (true)
  {
    this.Invoke(new MethodInvoker(() =>
                {
                  foreach(GameObject ob in mygame.scenes[CurrentScene].objects)
                  {
                    //run code here
                  }
                }
                ));
  }
}

你不能在foreach循环周围加一个括号,类似于
newmethodinvoker(()=>{…})?撇开语法错误不谈,我觉得这非常危险。列表在C#中不是线程安全的。你在做什么来确保线程安全?@EricLippert其实什么都没有。那么你应该期望有一个程序随机崩溃或丢失用户数据。有趣!我要折磨群众,谢谢!这是一个文档页面,它解释了lambda是什么,你可以看到,如果它不是一个表达式,那么你需要括号