集合被修改枚举操作可能无法执行

Dr *_*her 2 c# datatable foreach openform sqldataadapter

好的,所以我想打开一个新表格,如果还没有打开.所以我根据表格的标题或文字检查表格.现在,到目前为止,它的工作原理,如表格打开,如果它已经打开,它只是将它带到前面.但我的问题是,如果它没有打开,我尝试创建它的新实例,它会抛出"收集被修改;枚举操作可能无法执行".而我无法为我的生活找出原因.任何帮助表示赞赏.

foreach (DataRow iRow in chatcheck.Rows)
{
   FormCollection fc = Application.OpenForms;
   foreach (Form f in fc)
   {
      if (f.Text != ChatReader["Sender"].ToString())
      {

         ChatBox chat = new ChatBox();
         Connection.ConnectionStrings.chatopen = ChatReader["Sender"].ToString();
         chat.Text = Connection.ConnectionStrings.chatopen;
         chat.Show();
         chat.BringToFront();

      }
      else if (f.Text == ChatReader["Sender"].ToString())
      {
              f.BringToFront();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 7

不要使用foreacha for-loop:

for (int i = 0; i < Application.OpenForms.Count; i++ )
{
    Form f = Application.OpenForms[i];
    if (f.Text != ChatReader["Sender"].ToString())
    {

        //...
        chat.Show();
        chat.BringToFront();
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您可以foreach在枚举期间更改a的基础集合.但如果您创建一个新表单并在那里显示它,就会发生这种情况.您将另一个表单添加到open-collection.