C# 在按下按钮时跳出循环

标签 c# foreach

我有一个简单的 C# foreach 循环,如何在按下按钮时跳出循环?它不在 backgroundWorker 线程中,所以我不能使用 backgroundWorker.Cancellation Pending。

最佳答案

在表单中创建一个 bool 标志。将事件处理程序附加到按钮单击事件,并在事件处理程序中将标志设置为 true。

检查循环中的标志,如果为真,则调用“break”。 (更好的选择是使用 while 循环而不是 for 循环,并在 while 条件下检查标志)

显然,for 循环需要在某种形式的后台线程上运行,否则 GUI 将无法响应。如果您不知道如何执行此操作,请查看 ThreadPool.QueueUserWorkItemBackgroundWorker .如果您确实使用了 BackgroundWorker,则可以使用内置的 CancelAsync() 方法,而不是编写您自己的取消标志。

[编辑:正如其他人(下文)所指出并进行了更深入的讨论 herehere ;您确实需要在访问 bool 之前锁定或将其标记为 volatile]

[不要忘记在开始循环之前设置标志的正确状态。]

关于C# 在按下按钮时跳出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221839/

相关文章:

c# - 从数据表中删除具有行值的列

r - 使用 mclapply、foreach 或 [r] 中的其他东西并行操作对象?

c# - 使用foreach很难从一大串数字中求和项目

php - 获取foreach php中的最后一项

javascript - forEach 与 Bootstrap 网格系统的用法

c# - 谁能解释这个 'has no implementation' 错误?

c# - NHibernate 4 升级 - 不能同时获取多个包

C# Linq 谓词生成从列表中删除所有空值

c# - 检查现有的 'wired up' 方法

php - 没有任何键的多维数组值打印