我如何让我的c#程序睡眠(暂停执行)50毫秒?
当前回答
Thread.Sleep(50);
在指定的时间内,操作系统不会调度线程执行。该方法将线程的状态更改为包含WaitSleepJoin。
此方法不执行标准的COM和SendMessage抽取。 如果您需要在具有STAThreadAttribute的线程上休眠,但又希望执行标准COM和SendMessage泵送,请考虑使用指定超时间隔的Join方法的一个重载。
Thread.Join
其他回答
可读性:
using System.Threading;
Thread.Sleep(TimeSpan.FromMilliseconds(50));
Thread.Sleep(50);
在指定的时间内,操作系统不会调度线程执行。该方法将线程的状态更改为包含WaitSleepJoin。
此方法不执行标准的COM和SendMessage抽取。 如果您需要在具有STAThreadAttribute的线程上休眠,但又希望执行标准COM和SendMessage泵送,请考虑使用指定超时间隔的Join方法的一个重载。
Thread.Join
两全其美:
using System.Runtime.InteropServices;
[DllImport("winmm.dll", EntryPoint = "timeBeginPeriod", SetLastError = true)]
private static extern uint TimeBeginPeriod(uint uMilliseconds);
[DllImport("winmm.dll", EntryPoint = "timeEndPeriod", SetLastError = true)]
private static extern uint TimeEndPeriod(uint uMilliseconds);
/**
* Extremely accurate sleep is needed here to maintain performance so system resolution time is increased
*/
private void accurateSleep(int milliseconds)
{
//Increase timer resolution from 20 miliseconds to 1 milisecond
TimeBeginPeriod(1);
Stopwatch stopwatch = new Stopwatch();//Makes use of QueryPerformanceCounter WIN32 API
stopwatch.Start();
while (stopwatch.ElapsedMilliseconds < milliseconds)
{
//So we don't burn cpu cycles
if ((milliseconds - stopwatch.ElapsedMilliseconds) > 20)
{
Thread.Sleep(5);
}
else
{
Thread.Sleep(1);
}
}
stopwatch.Stop();
//Set it back to normal.
TimeEndPeriod(1);
}
使用这段代码
using System.Threading;
// ...
Thread.Sleep(50);
从.NET Framework 4.5开始,你可以使用:
using System.Threading.Tasks;
Task.Delay(50).Wait(); // wait 50ms