线程的替代品。睡在C#?
我有一个代码,当它运行时,它会按顺序执行一系列行。 我想在中间加一个停顿线程的替代品。睡在C#?,c#,.net,multithreading,threadpool,C#,.net,Multithreading,Threadpool,我有一个代码,当它运行时,它会按顺序执行一系列行。 我想在中间加一个停顿 // Sleep for 10 seconds System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10)); 现在我有这样的 //do work Thread.Sleep(10800000); //do work // Sleep for 10 seconds System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
现在我有这样的
//do work
Thread.Sleep(10800000);
//do work
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
然而,这冻结了软件,我认为这是因为睡眠时间太长了。
我在网上搜索了一下,发现了另一个叫做定时器的作品。
有人能给我一个定时器的示例代码,它的工作原理和Thread.sleep一样吗
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
先谢谢你
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
编辑:我需要软件等待3个小时,然后再继续执行其余的代码。此软件用于与机器通信,我不能让其余代码在等待3小时后执行。请参阅。这里有一个很好的解释,所有的类成员,以及一些示例代码供您在测试/学习时遵循
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
不过,请注意,当您希望以特定间隔触发事件时,应该使用
计时器。如果您只是想暂停应用程序的执行,那么应该使用Thread.Sleep()
。但是,正如许多其他人所指出的,您正在导致线程长时间睡眠。线程。睡眠是您想要使用的,但是您可能需要使用比3小时更合理的睡眠时间
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
更新:
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
在阅读了一些评论之后,Thread.Sleep
可能不是您想要的。按照其他人的建议,使用系统.Threading.Timer
。您正在休眠线程10800秒或3小时。Sleep()用于冻结线程,在此期间停止软件中的任何操作。在这种情况下,持续时间为18分钟。你想做什么?如果睡眠在主线程上,你的软件会冻结。请记住,参数以毫秒为单位。1080000毫秒=10800秒
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
另一种传递时间的方法是传递TimeSpan对象。例:
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
至于计时器:
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
你可以使用
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
看一看
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
可能您需要使用“调度程序”。再看一看您的问题是您正在阻塞应用程序的主线程,而主线程负责保持ui运行。你不应该这样做。相反,使用计时器-表单之一可能是最简单的表单应用程序,或考虑后台工作人员。(对于如此长的等待时间,计时器可能更合适)线程。睡眠通常用于暂停单独的线程,而不是在应用程序的主线程中
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
计时器通常用于定期使主线程停止其正常操作并处理事件
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
这两种方法都可用于在特定时间间隔后定期执行功能
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
我不会要求主线程睡眠3小时。使用计时器
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
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
}
我认为你应该使用一种新的方法。它可以帮助您在需要继续运行程序时对对象进行等待并释放锁
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
您应该在这里找到答案:您可以替换
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
Thread.Sleep(X);
借
// Sleep for 10 seconds
System.Threading.Thread.Sleep(new TimeSpan(0, 0, 10));
所以缩短睡眠时间?1080000毫秒等于三小时。计时器和睡眠有不同的用途,你不能用另一个代替。呃,你为什么要求睡眠时间为10800秒?只是想澄清一下,你真的想睡眠10800000
毫秒(3小时)?如果你在gui线程中使用睡眠…它将冻结所有用户输入。不要这样做,“冻结软件”,如果你睡眠的线程与主线程不同,它就不应该冻结。睡3个小时是很长的时间。你到底想干什么?为什么希望线程睡眠3小时?如果要求在运行某些代码之前等待3小时,则使用thread。他不应该使用睡眠。这可能是一个经常出现的问题。它也没有说它在表单上,可能是服务或命令提示符。虽然听起来他做得不对,但有很多理由让事情每x小时发生一次(db备份、清理功能等)。@JeremyK-我会告诉你,我对他的评论读得太多了,但看到他的更新,不幸的是,他没有做任何这些。