我有一个代码,在运行时,它会按顺序执行一系列行。 我想在两者之间添加暂停。
目前,我喜欢这个
//do work
Thread.Sleep(10800000);
//do work
然而,这会冻结软件,我认为这是因为睡眠时间过长。
我在网上搜索,发现另一个名为Timer的工作。
有人可以给我看一个Timer的示例代码,它的工作原理就像Thread.sleep一样吗?
提前谢谢。
编辑:我需要软件等待3个小时才能继续执行其余的代码。该软件用于与机器通信,我等不到3小时就不能让其余的代码执行。
答案 0 :(得分:6)
请参阅this MSDN reference on the System.Threading.Timer
class。在测试/学习时,有一个很好的解释,所有的班级成员,以及一些示例代码。
请注意,当您想要以特定间隔触发事件时,应使用Timer
。如果您只是想暂停执行应用程序,那么您应该使用Thread.Sleep()
。然而,正如许多其他人所指出的那样,你导致你的线程长时间睡眠。
答案 1 :(得分:4)
如果睡眠在主线程上,您的软件将冻结。请记住,参数以毫秒为单位。 10 800 000毫秒= 10 800秒
另一种传递时间的方法是传递TimeSpan对象。例如:
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
至于计时器:
您可以使用System.Timers.Timer
;
Timer timer = new Timer();
timer.Interval = 20; // milliseconds
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.AutoReset = true; // if not set you will need to call start after every event fired in the elapsed callback
timer.Start();
答案 2 :(得分:4)
使用计时器!
private DispatcherTimer Timer;
public Constructor
{
Timer = new System.Windows.Threading.DispatcherTimer();
Timer.Tick += new EventHandler(Timer_Tick);
Timer.Interval = new TimeSpan(0,0,10);
Timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
Timer.Stop();
Timer -= Timer_Tick;
Timer = null;
// DO SOMETHING
}
答案 3 :(得分:2)
Thread.Sleep
是您想要使用的,但您可能希望使用比3小时更合理的睡眠时间。
更新
在阅读了一些评论后,Thread.Sleep
可能不是你想要的。正如其他人所建议的那样,使用System.Threading.Timer
。
答案 4 :(得分:2)
您的问题是您正在阻止应用程序的主线程,该主线程负责保持ui运行。你不应该这样做。而是使用计时器 - 在Forms应用程序中,Forms one可能是最简单的,或者考虑使用BackgroundWorker。 (对于这么长的等待,计时器可能更合适)
答案 5 :(得分:1)
看看Thread.Sleep(300) not working correctly
可能你需要使用“Dispatcher”。看看here
答案 6 :(得分:1)
Thread.Sleep通常用于暂停单独的线程,而不是在应用程序的主线程中。
定时器通常用于定期使主线程停止其正常操作并处理事件。
任何一种方法都可用于在一定的时间间隔后定期执行一项功能。
我不会做的是让主线程睡3个小时。
答案 7 :(得分:1)
我认为你应该使用Monitor。当您需要继续运行程序时,它可以帮助您等待对象并释放锁定。
你应该在这里找到答案:Safe Thread Synchronization
答案 8 :(得分:1)
您可以替换
Thread.Sleep(X);
通过
Task.WaitAll(Task.Delay(X));
答案 9 :(得分:0)
你正在睡觉10800秒或3个小时。 Thread.Sleep()旨在冻结你的线程,阻止任何事情在软件中工作那段时间。在这种情况下,持续时间为18分钟。你想做什么?