我有一个简单的 C# foreach 循环,如何在按下按钮时跳出循环?它不在backgroundWorker线程中,所以我不能使用backgroundWorker.Cancellation Pending。
在表单中创建一个布尔标志。将事件处理程序附加到按钮单击事件,并在事件处理程序中将标志设置为 true。
检查循环中的标志,如果为真,则调用“break”。 (更好的选择是使用 while 循环而不是 for 循环,并在 while 条件中检查标志)
显然 for 循环需要位于某种形式的后台线程上,否则 GUI 将无法响应。如果您不知道如何执行此操作,请查看ThreadPool.QueueUserWorkItem http://msdn.microsoft.com/en-us/library/system.threading.threadpool.queueuserworkitem.aspx or the 后台工作者 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx。如果您确实使用BackgroundWorker,则可以使用内置的CancelAsync() 方法,而不是编写自己的取消标志。
[编辑:正如其他人所指出的(如下)并进行了更深入的讨论here https://stackoverflow.com/questions/1222184/do-i-need-to-lock-or-mark-as-volatile-when-accessing-a-simple-boolean-flag-in-c and here https://stackoverflow.com/questions/458173/can-a-c-thread-really-cache-a-value-and-ignore-changes-to-that-value-on-other-th/458193#458193;您确实需要在访问布尔值之前锁定或将其标记为易失性]
[在开始循环之前不要忘记设置标志的正确状态。]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)