循环和控制流程

时间:2011-10-16 02:51:54

标签: c# loops

提前感谢您的帮助。我不是一个程序员或学生,要求提供家庭作业帮助,只是一名技术人员帮助完成工作项目。

这个应该很容易,但我脑筋急转直,我需要你的帮助。我在C#中编写了一个GUI控制程序,但为了清楚起见,我将以半伪代码编写示例。我有两个布尔控制变量和void doSomething()方法列表。

bool ready = true;
bool willLoop = true;

runButton.Click(...) { ...

通过切换按钮将willLoop设置为true / false。我希望runButton.Click(...)遍历doSomethings()列表,每个都设置为false,然后在完成执行后返回true。当ready设置回true时,列表中的下一个Item将执行并将ready设置为false,并在完成时返回true。如果willLoop为true,则程序应反复遍历List,执行每个项目。如果有人按下切换按钮并在程序执行时将willLoop设置为true或false,我需要程序完成遍历列表然后停止(中断?)如果在最后一个Item执行后willLoop为false,或者迭代再次,如果willLoop是真的。所有的线程/实时内容都是自动处理的,我只需要一个(嵌套的?)循环结构,它将使用控制变量来完成我需要的工作。

我只对代码的循环/迭代部分感兴趣,所以伪代码很好。实际应用程序正在使用串行端口控制外部设备 - 列表中的每个项目都是向设备发送命令并将ready设置为false的方法。当设备完成移动时,它会向后发送一个字符串,并且该侦听器将就绪设置为true。

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您需要的结构类似于

runButton.Click(...) {
  ready = true
  while (willLoop)
    for each item in list
      ready = false
      process item
      wait until (ready == true)
}

我对C#不实用,但我认为Click回调不是异步的,所以一旦你点击按钮,一切都会停止,你将无法再次切换它。您是否已经负责管理此类多线程问题?

答案 1 :(得分:0)

这是我的问题:

public partial class MyFormClass : Form
{
    private bool ready = true;
    private object readyLock = new object();
    private bool willLoop = true;
    List<Action> myFunctionList = new List<Action>();

    private void button1_Click(object sender, EventArgs e)
    {
        Queue<Action> remainingActions = new Queue<Action>();

        do
        {
            remainingActions = new Queue<Action>(myFunctionList);
            while (remainingActions.Count > 0)
            {
                lock (readyLock)
                {
                    // In case someone was already in the while,
                    // but took the last item in the queue.
                    if (remainingActions.Count == 0) break;

                    ready = false;
                    Action currentAction = remainingActions.Dequeue();
                    currentAction();
                    ready = true;
                }
            }
        } while (willLoop);
    }
}

您可以理解,您可以将“myFunctionList”替换为您希望存储函数列表的任何含义。