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中的附加代码;你就是这么想的吗