每隔X分钟执行一次功能

时间:2017-01-15 17:30:40

标签: c# .net selenium selenium-webdriver

我对这应该如何运作有点困惑。我有多个对象保存在XML文件中,这些对象具有TimeBetweenReposts(如10分钟)和TimesToRepost(20次)的属性。

每个对象部分应该每隔TimeBetweenReposts分钟触发一次函数。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

你有几个选项,你最简单的就是创建一个单独的线程来运行一个看起来像这样的函数:

private void CheckTime()
{
    while (!exitCondition) //So you can cleanly kill the thread before exiting the program.
       {
           if (nextCheck < DateTime.Now)
           {
               DoAction();
               nextCheck = DateTime.Now + TimeBetweenReposts;
           }
           Thread.Sleep(1000); //Can be tweaked depending on how close to your time it has to be.
       }

}

否则,您可以在系统任务计划程序中创建条目。

答案 1 :(得分:0)

您可以使用计时器每X秒,分钟或任何您需要的东西做一些事情。

你可以像这样实现一个Timer:

public class XMLFilesManager
{
    Timer tm = null;

    public XMLFilesManager()
    {
        this.tm.Elapsed += new ElapsedEventHandler(XMLFilesManagerTimer_Elapsed);
        this.tm.AutoReset = true;
        this.tm = new Timer(60000);
    }

    public void Start()
    {
        this.tm.Start();
    }

    public void Stop()
    {
        this.tm.Stop();
    }

    protected void XMLFilesManagerTimer_Elapsed(object sender, ElapsedEventArgs e)
    {
         this.tm.Stop();

         try
         {
             Execute();
         }
         catch (Exception ex)
         {
             // LOG ERROR
         }
         finally
         {
             this.tm.Start();
         }
     }

     private void Execute()
     {
         // PUT YOUR BUSINESS LOGIC HERE
     }
}

然后,您可以添加一个属性来存储执行历史记录,例如:

// History of your object executions : object's identifier, last execution time and nb times you have execute the function for this object
List<Tuple<int,DateTime,int>> objectExecutionHistory = null;

执行函数中,循环访问xml对象,并执行您必须执行的操作。