我有一个简单的C#foreach循环,当按下按钮时如何突破循环?它不在backgroundWorker线程中,因此我无法使用backgroundWorker.CancellationPending.
在表单中创建一个布尔标志.将事件处理程序附加到按钮单击事件,并在事件处理程序中将标志设置为true.
检查循环中的标志,如果是,则调用"break".(更好的选择是使用while循环而不是for循环,并在while条件中检查标志)
显然,for循环需要在某种形式的后台线程上,否则GUI将不会响应.如果您不知道如何执行此操作,请查看ThreadPool.QueueUserWorkItem或BackgroundWorker.如果您确实使用BackgroundWorker,则可以使用内置的CancelAsync()方法,而不是编写自己的取消标记.
[编辑:正如其他人所指出的那样(下文),并在这里和这里进行更深入的讨论; 你需要在访问bool之前锁定或将其标记为volatile]
[在开始循环之前,不要忘记设置正确的标志状态.]