C# 有没有办法停止foreach循环,直到事件再次发生?

C# 有没有办法停止foreach循环,直到事件再次发生?,c#,arrays,foreach,C#,Arrays,Foreach,我目前正在尝试编程一个foreach循环,并将其编码到我的按钮单击事件中。我遇到的问题是,循环直接到达数组的末尾,我希望它在数组中的每个字符串处停止,直到再次单击按钮,然后它将移动到下一个字符串。我应该使用休息;还是继续 foreach (string s in weapons) { pictureBox9.Image = Image.FromFile(s + ".png"); counter++; continue; } 停止使用foreach循环,因为当您停止/暂停

我目前正在尝试编程一个foreach循环,并将其编码到我的按钮单击事件中。我遇到的问题是,循环直接到达数组的末尾,我希望它在数组中的每个字符串处停止,直到再次单击按钮,然后它将移动到下一个字符串。我应该使用休息;还是继续

foreach (string s in weapons)
{
    pictureBox9.Image = Image.FromFile(s + ".png");
    counter++;
    continue;
}
停止使用foreach循环,因为当您停止/暂停循环时,它将冻结您的UI

用这样的东西代替

counter++;
if(counter >= weapons.Count)
{
    counter = 0;
}
string weapon = weapons[counter];
pictureBox9.Image = Image.FromFile(weapon + ".png");
你有一个柜台。如果按钮被按下,并且如果达到高位,则将其增加,并将其重置。然后您可以从列表中选择图像,至少您可以更新图像


一个很好的改进是在开始时加载所有图像,并将它们放在一个列表中以替换武器列表。您也可以通过计数器访问列表中的项目。

既然保存了计数器,为什么不直接在计数器索引处获取元素?没有循环。您想在每次按下is按钮时更改图像,是吗?小心不要阻塞ui线程。停止使用foreach即可。若您需要在单击按钮后显示一个图像,那个么只需运行此代码一次。您可以利用IEnumerable一次生成一个武器,或者只是简单地存储一个arrya和一个计数器,就像您在代码中几乎做的那样。在这一点上,我建议不要在GUI线程上执行文件I/O。也许应该预加载图像或其他东西。@Fildor加载所有图像并不总是可行的,最好是使用异步版本,这样在加载图像时Ui线程就不会被阻塞是的,冻结Ui总是一个问题。但是,如果您将图像存储在一个列表中,而不是每次都加载它,那么应该可以。例如,在WPF应用程序中更改图像时,我从未遇到过任何问题。@MightyBadaboom您所说的将适用于WPF,但不适用于Web应用程序/Javascript,这就是为什么异步将是一个更好的选择,即使初始图像加载/缓存也应异步完成