我无法选择正确的方法来实现我的目标。 我正在研究算法教学系统,我正在使用 C#。我需要将我的算法分成几个步骤,每个步骤都包含一个递归。 我必须在每个步骤后停止执行,然后用户可以使用我的 GUI 中的按钮移动到下一步(下一个递归)。
经过搜索,线程是正确的选择,但我找到了几种方法:
(Thread.sleep/interrupt):没用,我的 GUI 死机了!!
(暂停/恢复):我读到过使用它是个坏主意。
(Waithandles):仍在阅读有关它们的信息。
(监控等待/恢复)。
我没有太多时间尝试阅读所有以前的方法,请帮助我选择最适合我系统的方法。非常欢迎任何建议。
最佳答案
如果您希望在“后台”工作,同时您的用户界面继续保持交互,或者如果您希望将一个缓慢的任务拆分,以便它可以在多个处理器内核上执行,那么您只需要使用线程。
根据您的描述,您只需要编写一个线程:
- 记住用户在序列中的位置。
- 每次他们点击您的按钮时,执行下一步
如果您希望使用线程,那么您可以使用 AutoResetEvent 让您的线程循环执行这些步骤,并在每次迭代时使用 WaitOne。每当用户单击按钮开始下一步时,您的用户界面就会发出该事件信号。 (您还需要在步骤完成时通知用户界面,以便用户只能按顺序运行步骤 - 认为您可以在他们开始步骤时设置 button.Enabled=false,并且线程可以使用 button.Invoke 来设置Enabled=true 完成该步骤时)。但是对于您所描述的内容,线程听起来过于复杂。
关于c# - 我需要在递归算法期间停止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529496/