Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在此上下文中使用哪个计时器_C# - Fatal编程技术网

C# 在此上下文中使用哪个计时器

C# 在此上下文中使用哪个计时器,c#,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) 这一切都是通过控制台

我有一个类似如下的
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)
这一切都是通过
控制台
应用程序实现的

如何创建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");
}

(以上摘自)

这以毫秒为单位工作,如果它被中断,您可以捕获它,但通常不会发生这种情况

System.Threading.Thread.Sleep(150000);
编辑:

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

如果希望线程安全暂停,请使用:

task.Wait(150000);
使用循环而不是循环。步骤1和2将在按照指定的间隔触发的事件内完成


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

常规方法看起来不错。请注意,与
while
循环不同,您将有一个
if(something){timer.Stop();}
。在这个实现中,调用将每150秒发生一次,而不管您的操作花了多长时间。@Servy。。。你是否可以把你的想法作为解决方案;我可以更全面地看到这个模式吗?睡一根线怎么会不安全呢?暂停那条线。请事先指定类似的要求。您是否看到我添加到OP中的附加代码;你就是这么想的吗