我有一段代码,运行时会按顺序执行一系列语句。我想在其中添加一个暂停。
目前的代码如下:
//do work
Thread.Sleep(10800000);
//do work
这会导致软件被冻结,我认为是因为休眠时间太长了。我在网上搜索并找到了另一种解决方法,称为Timer。有人能给我展示一个类似于Thread.sleep的Timer示例代码吗?
提前感谢您。
编辑:我需要软件等待3小时才能执行其余代码。该软件旨在与机器通信,在等待3小时时我不能让其余代码执行。
我有一段代码,运行时会按顺序执行一系列语句。我想在其中添加一个暂停。
目前的代码如下:
//do work
Thread.Sleep(10800000);
//do work
System.Threading.Timer
类的参考文献。其中包括了对该类的所有成员的详细解释以及一些示例代码,方便你在测试和学习时使用。Timer
应该用于想要在一定时间间隔内触发事件的情况。如果你只是想暂停应用程序的执行,则应使用Thread.Sleep()
。然而,正如其他许多人指出的那样,这会导致线程长时间休眠。如果该睡眠在主线程上,您的软件将会冻结。请记住,该参数是以毫秒为单位的。10800000毫秒 = 10800秒。
另一种传递时间的方法是传递一个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();
使用计时器!
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
}
Thread.Sleep
是用于此目的的方法,但你可能希望使用一个比 3 小时更合理的休眠时间。Thread.Sleep
可能不是你想要的。像其他人建议的那样,使用 System.Threading.Timer
。Thread.Sleep
不是他应该使用的。 - ken2k您的问题在于您正在阻塞应用程序的主线程,这是维持 UI 运行的责任。您不应该这样做。相反,请使用定时器 - 在表单应用程序中,Forms 定时器可能是最简单的选择,或者考虑 BackgroundWorker。(对于如此长的等待,定时器可能更合适)
你可以替换
Thread.Sleep(X);
Task.WaitAll(Task.Delay(X));
Thread.Sleep通常用于暂停单独的线程,而不是在应用程序的主线程中使用。
计时器通常用于定期使主线程停止其正常操作并处理事件。
任何一种方法都可以用于在一定时间间隔后定期执行函数。
我不会让主线程睡眠3个小时。
你正在让线程睡眠10800秒,即3小时。Thread.Sleep()旨在冻结您的线程,在此期间停止软件中的任何操作。在这种情况下,持续时间为18分钟。你想要做什么?
10800000
毫秒(3小时)吗? - keyboardP