如何在每X分钟后调用一段方法一段时间

时间:2016-12-22 05:08:26

标签: c# visual-studio-2013

我有两种方法。第一种方法启动.exe和第二种方法查找由.exe。

创建的输出文件
  1. 程序应该在调用.exe后开始查找输出X分钟(在app.config中定义)。

  2. 它应该调用方法来查找输出文件,在某个频率(在app.config中定义)后它应该自己调用,查找输出文件如果找到则返回成功中断循环转到下一行如果假去睡觉。

  3. 重复步骤2,直到调用.exe后达到Y分钟(在app.config中定义)。如果超过则停止返回失败并转到下一个语句。

  4. 我可以使用datetime.now来获取启动.exe的时间,但无法弄清楚如何添加X和Y分钟以及如何使用这些时间限制。

    到目前为止,这是我的代码:

    //Running the process .exe
    DV.runprocess();
    // check output file
    String checkOutputFrequency=System.Configuration.ConfigurationManager.AppSettings["CheckOutputFrequency"].ToString();
    decimal outfrequencyVal = (!string.IsNullOrEmpty(checkOutputFrequency)) ? Decimal.Parse(checkOutputFrequency) : 1;
    bool FileFound = false;
    
    while (true)
    {
          FileFound = DV.checkOutputFile();
    
          if (FileFound == true) 
              break;
    
          System.Threading.Thread.Sleep(Convert.ToInt32(outfrequencyVal * 60 * 1000));
    }
    

2 个答案:

答案 0 :(得分:1)

创建一个新线程并传入开始时间。睡眠X分钟然后使用你的循环代码。对于每个循环,检查是否通过了开始时间加上Y分钟

while (DateTime.Now < startTime.AddMinutes(Y)) {
    //your codes...
}

答案 1 :(得分:0)

另一种方式是async-await

public async Task RunAndListen()
{
    DV.runprocess();

    string checkOutputFrequency = 
        System.Configuration.ConfigurationManager.AppSettings["CheckOutputFrequency"].ToString();

    decimal outfrequencyVal;
    If (Decimal.TryParse(checkOutputFrequency, out outfrequencyVal) == false)
    {
        outfrequencyVal = 1;
    }

    var delayInMilliseconds = outfrequencyVal * 60 * 1000;

    bool FileFound = DV.checkOutputFile();
    while (FileFound == false)
    {
        await Task.Delay(delayInMilliseconds);
        FileFound = DV.checkOutputFile();
    }    
}

await Task.Delay(delayInMilliseconds);将有效地将当前线程释放回ThreadPool并在给定时间过后继续执行下一行。