在c#中满足条件后执行任务

时间:2017-04-12 06:24:00

标签: c#

我们假设我们有:

bool condition = false;

现在我想开始一项新任务:

new Task(() => 
{
    Do something as soon as condition == true;

}).Start();

某个时间之后,另一个线程/任务将条件更改为true

我该怎么办呢?

编辑:

我有一个程序用于备份一个文件夹到另一个文件夹。我可以设置多个文件夹(对于axample A - > B,C - > D)。比我启动程序并开始复制文件。

但是当我在程序运行时添加新文件夹(E - > F)时,我必须再次手动启动它(在完成A - > B和C - > D之后)让他做E - > F.

我想要它,在添加新文件夹后,在当前作业完成后再次自动启动,以执行新文件夹。

2 个答案:

答案 0 :(得分:4)

如果我理解你,你正在寻找这样的事情:

  //TODO: do not forget to dispose m_Condition 
  ManualResetEventSlim m_Condition = new ManualResetEventSlim(false);

  public bool Condition {
    get {
      return m_Condition.IsSet;  
    }
    set {
      if (value) 
        m_Condition.Set();
      else
        m_Condition.Reset();
    }
  } 

  ...

  Task myTask = Task.Run(() => {
    m_Condition.Wait();

    //TODO: put relevant code here
  });

只要Condition切换为true

,任务就会开始
  Condition = true; // this unlock myTask

答案 1 :(得分:2)

有很多方法可以做这样的事情,但最简单的方法可能是使用属性:

bool condition = false;

bool Condition
{
    get { return condition; }
    set
    {
        if(!condition  value)
        {
            //Now condition has changed from false to true
            //Do what you want here
        }
        condition = value;
    }
}

<强> - 编辑 -

我发现你的问题是当从false变为true时所以我稍微编辑了设置部分