在 C# 中处理无限循环退出的正确方法

swo*_*ish 3 c# winforms

在我的应用程序中,我发现需要有无限的 while 循环,主要是为了连续执行一些重复的操作,除非发生另一个事件,所以我正在做的是

while(chkFlag)
{
   //do something here which takes around 30 seconds
}
Run Code Online (Sandbox Code Playgroud)

然后在其他事件中说按下按钮来停止我做的循环

chkFlag = false;
Run Code Online (Sandbox Code Playgroud)

现在这可以完成工作,但问题是这不会立即停止循环,因为仅在循环完全执行后才检查 chkFlag。那么任何人都可以告诉我如何根据事件立即退出循环。

小智 5

“阻塞”代码可能应该移动到某种工作线程中(可以终止和/或丢弃结果)。如果使用BackgroundWorker(推荐,因为它使这变得简单),有内置的支持来处理取消操作。

然后,循环可以移动到BackgroundWorker内部,或者worker的完成(RunWorkerCompleted)事件可以触发下一个worker启动(这会导致隐式循环)。

快乐编码。


有更多“激进”的方式来终止/向线程发出信号;但提出这些建议需要比目前更多的信息。