我如何让我的c#程序睡眠(暂停执行)50毫秒?
当前回答
在Windows中无法指定确切的睡眠时间。你需要一个实时的操作系统。最好的方法是指定一个最小睡眠时间。然后由调度器在此之后唤醒线程。永远不要在GUI线程上调用. sleep()。
其他回答
System.Threading.Thread.Sleep(50);
记住,在主GUI线程中这样做会阻碍GUI的更新(它会感觉“迟缓”)。
只要把;使它也适用于VB.net。
可读性:
using System.Threading;
Thread.Sleep(TimeSpan.FromMilliseconds(50));
既然现在你有了async/await特性,那么最好的睡眠50ms的方法就是使用Task。延迟:
async void foo()
{
// something
await Task.Delay(50);
}
或者如果你的目标是。net 4(使用VS2010的Async CTP 3或Microsoft.Bcl.Async),你必须使用:
async void foo()
{
// something
await TaskEx.Delay(50);
}
这样你就不会阻塞UI线程。
两全其美:
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);
}
从.NET Framework 4.5开始,你可以使用:
using System.Threading.Tasks;
Task.Delay(50).Wait(); // wait 50ms
推荐文章
- 在c#中从URI字符串获取文件名
- 检查SqlDataReader对象中的列名
- 如何将类标记为已弃用?
- c# 8支持。net框架吗?
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接