在这种情况下使用哪个Timer

时间:2012-11-20 17:47:00

标签: c#

我有do/while,如下所示:

do {

  //1.look for a report

  //2.either use interops to run an xl macro report or run a batch file report or run vbs file report

  //3.then sleep/pause program for 150seconds 

} while (look for next report to run)

这都是Console申请。

如何创建150秒暂停/睡眠?第2步可能涉及运行各种进程,我有点担心简单地使用Thread.Sleep可能会很麻烦,因为它不是线程安全的。


我应该以某种方式将这种代码用于结构中,即将步骤1和2放在CallMeBack方法中吗?

static void Main(string[] args) {
    var t = new System.Timers.Timer(1000);
    t.Elapsed += (s, e) => CallMeBack();
    t.Start();

    Console.ReadLine();
}
public static void CallMeBack() {

    //1.look for a report
    //2.either use interops to run an xl macro report or run a batch file report or run vbs file report

    Console.WriteLine("Doing some consuming time work using sleep");
}

(以上摘自HERE

2 个答案:

答案 0 :(得分:1)

这在毫秒内工作,你可以在它被中断时捕获它,但通常不会发生。

System.Threading.Thread.Sleep(150000);

编辑:

另一种选择是使用连接,如果你只是想等到其他人完成,或者如果你想每150秒执行一次,你自己的答案就可以了。在询问之前确保你知道自己想要什么。

如果您想要线程安全暂停使用:

task.Wait(150000);

答案 1 :(得分:1)

使用Timer代替循环。步骤1和2将在使用您指定的间隔触发的事件内完成。

如果您需要半常规计时器,可以将Timer对象设置为不自动重置,并在事件结束时手动启用它。