当前位置:  开发笔记 > 编程语言 > 正文

如何使我的C#程序睡眠50毫秒?

如何解决《如何使我的C#程序睡眠50毫秒?》经验,为你挑选了7个好方法。

如何让我的C#程序睡眠50毫秒?

这似乎是一个简单的问题,但我有一个暂时的大脑失败时刻!



1> Isak Savo..:
System.Threading.Thread.Sleep(50);

但请记住,在主GUI线程中执行此操作会阻止GUI更新(它会感觉"迟钝")

只需删除它;以使其适用于VB.net.



2> Marcel Toth..:

等待(几乎)任何编程语言基本上有3种选择:

    等待宽松

    在给定时间内执行线程块(=不消耗处理能力)

    阻塞/等待线程无法处理

    不那么精确

    紧迫等待(也称为紧环)

    处理器在整个等待间隔内非常繁忙(实际上,它通常占用一个核心处理时间的100%)

    某些操作可以在等待时执行

    非常精确

    前2的 组合

    它通常结合了处理效率1.和精确度+能力做2的事情.


为1. - 在C#中等待:

Thread.Sleep(numberOfMilliseconds);

但是,Windows线程调度程序会导致准确度Sleep()大约为15ms(因此,即使计划等待1ms,Sleep也可以轻松等待20ms).

for - 在C#中等待是:

Stopwatch stopwatch = Stopwatch.StartNew();
while (true)
{
    //some other processing to do possible
    if (stopwatch.ElapsedMilliseconds >= millisecondsToWait)
    {
        break;
    }
}

我们也可以使用DateTime.Now或使用其他时间测量方法,但Stopwatch速度要快得多(这在紧密循环中真的可见).

为3. - 组合:

Stopwatch stopwatch = Stopwatch.StartNew();
while (true)
{
    //some other processing to do STILL POSSIBLE
    if (stopwatch.ElapsedMilliseconds >= millisecondsToWait)
    {
        break;
    }
    Thread.Sleep(1); //so processor can rest for a while
}

此代码会定期阻塞线程1ms(或稍微多一点,具体取决于操作系统线程调度),因此处理器在此时不会占用阻塞,并且代码不会占用处理器100%的功率.其他处理仍然可以在阻塞之间执行(例如:更新UI,处理事件或进行交互/通信事务).



3> Joel Coehoor..:

您无法在Windows中指定确切的睡眠时间.你需要一个实时操作系统.您可以做的最好的事情是指定最短的睡眠时间.然后由调度程序在此之后唤醒您的线程.而从未.Sleep()GUI线程上.



4> Toni Petrina..:

从现在开始你有async/await功能,睡眠50ms的最佳方法是使用Task.Delay:

async void foo()
{
    // something
    await Task.Delay(50);
}

或者,如果您的目标是.NET 4(使用Async CTP 3 for VS2010或Microsoft.Bcl.Async),则必须使用:

async void foo()
{
    // something
    await TaskEx.Delay(50);
}

这样您就不会阻止UI线程.


不需要`async`声明的替代方法是调用`Task.Delay(50).Wait();`

5> Alexander Pr..:

使用此代码

using System.Threading;
// ...
Thread.Sleep(50);



6> SelvirK..:
Thread.Sleep(50);

在指定的时间内,操作系统不会安排该线程执行.此方法更改线程的状态以包括WaitSleepJoin.

此方法不执行标准COM和SendMessage抽取.如果您需要在具有STAThreadAttribute的线程上休眠,但是您想要执行标准COM和SendMessage抽取,请考虑使用指定超时间隔的Join方法的一个重载.

Thread.Join



7> Roger Lipsco..:
Thread.Sleep

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有