c# - 我需要在递归算法期间停止执行

标签 c# multithreading recursion

我无法选择正确的方法来实现我的目标。 我正在研究算法教学系统,我正在使用 C#。我需要将我的算法分成几个步骤,每个步骤都包含一个递归。 我必须在每个步骤后停止执行,然后用户可以使用我的 GUI 中的按钮移动到下一步(下一个递归)。

经过搜索,线程是正确的选择,但我找到了几种方法:

  • (Thread.sleep/interrupt):没用,我的 GUI 死机了!!

  • (暂停/恢复):我读到过使用它是个坏主意。

  • (Waithandles):仍在阅读有关它们的信息。

  • (监控等待/恢复)。

我没有太多时间尝试阅读所有以前的方法,请帮助我选择最适合我系统的方法。非常欢迎任何建议。

最佳答案

如果您希望在“后台”工作,同时您的用户界面继续保持交互,或者如果您希望将一个缓慢的任务拆分,以便它可以在多个处理器内核上执行,那么您只需要使用线程。

根据您的描述,您只需要编写一个线程:

  • 记住用户在序列中的位置。
  • 每次他们点击您的按钮时,执行下一步

如果您希望使用线程,那么您可以使用 AutoResetEvent 让您的线程循环执行这些步骤,并在每次迭代时使用 WaitOne。每当用户单击按钮开始下一步时,您的用户界面就会发出该事件信号。 (您还需要在步骤完成时通知用户界面,以便用户只能按顺序运行步骤 - 认为您可以在他们开始步骤时设置 button.Enabled=false,并且线程可以使用 button.Invoke 来设置Enabled=true 完成该步骤时)。但是对于您所描述的内容,线程听起来过于复杂。

关于c# - 我需要在递归算法期间停止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529496/

相关文章:

javascript - 类型错误:f 不是函数

C++ 递归变量

VS2005 中的 C# : what do the following types default to in C#?

c# - Linq 隐式类型范围变量

python - 创建两个 TensorFlow session 时是否会创建图的多个实例?

java - 在 Spring 支持的 java 独立应用程序中将 SwingUtilities.invokeLater 放在哪里?

c# - DevExpress MemoEdit Control 比 TextEdit 重很多吗?

c# - Azure Function App 无法加载 IOptionsFormatter

c++ - 以编程方式查找机器上的内核数

java - 如何使用递归在Java中创建负斐波那契数列?