我有一个简单的 C# foreach 循环,如何在按下按钮时跳出循环?它不在 backgroundWorker 线程中,所以我不能使用 backgroundWorker.Cancellation Pending。
最佳答案
在表单中创建一个 bool 标志。将事件处理程序附加到按钮单击事件,并在事件处理程序中将标志设置为 true。
检查循环中的标志,如果为真,则调用“break”。 (更好的选择是使用 while 循环而不是 for 循环,并在 while 条件下检查标志)
显然,for 循环需要在某种形式的后台线程上运行,否则 GUI 将无法响应。如果您不知道如何执行此操作,请查看 ThreadPool.QueueUserWorkItem或 BackgroundWorker .如果您确实使用了 BackgroundWorker,则可以使用内置的 CancelAsync() 方法,而不是编写您自己的取消标志。
[编辑:正如其他人(下文)所指出并进行了更深入的讨论 here和 here ;您确实需要在访问 bool 之前锁定或将其标记为 volatile]
[不要忘记在开始循环之前设置标志的正确状态。]
关于C# 在按下按钮时跳出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221839/