Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_Multithreading_Threadpool - Fatal编程技术网

线程的替代品。睡在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-我会告诉你,我对他的评论读得太多了,但看到他的更新,不幸的是,他没有做任何这些。