c#Thread.Sleep使程序滞后

时间:2016-11-18 23:37:50

标签: c#

您好我有一个包含以下代码的程序

            oSkype.CurrentUserStatus = TUserStatus.cusOnline;
        Thread.Sleep(20);
        oSkype.CurrentUserStatus = TUserStatus.cusDoNotDisturb;
        Thread.Sleep(20);
        oSkype.CurrentUserStatus = TUserStatus.cusAway;
        Thread.Sleep(20);
        oSkype.CurrentUserStatus = TUserStatus.cusInvisible;
        Thread.Sleep(20);

出于某种原因,当它运行程序滞后但我停止滞后停止时。 滞后不是来自计算机,因为另一个程序仍在运行Wheel。 我该怎么做才能阻止滞后?

3 个答案:

答案 0 :(得分:2)

如果不了解oyu正在做什么,答案非常简单。让我们看一下Thread.Sleep的msdn documentat:

  

Thread.Sleep方法(Int32)
     .NET Framework(当前版本)其他版本   将当前线程挂起指定的毫秒数。

知道了这一点,预计会出现延迟,因为您要停止当前线程一段特定的时间,在这种情况下为20 ms。

答案 1 :(得分:2)

您的延迟可能是由于UI线程处于休眠状态时UI无法响应。如果使用异步方法修复,Task.Delay非常容易。 Task.Delay设置一个计时器以便稍后关闭然后该方法恢复。这使UI线程保持响应:

oSkype.CurrentUserStatus = TUserStatus.cusOnline;
await Task.Delay(20);
oSkype.CurrentUserStatus = TUserStatus.cusDoNotDisturb;
await Task.Delay(20);
oSkype.CurrentUserStatus = TUserStatus.cusAway;
await Task.Delay(20);
oSkype.CurrentUserStatus = TUserStatus.cusInvisible;
await Task.Delay(20);

答案 2 :(得分:0)

用户itsme86指示我搜索异步,我找到了这个youtube Link

我所做的是创建这个静态任务

        private static Task<int> SleepAsync(int MS)
    {
        return Task.Run(() =>
        {
            Thread.Sleep(MS);
            return MS / 1000;
        });
    }

然后我只需要做的就是我想让程序等待添加异步然后代码await SleepAsync(1000);

示例:

    private static Task<int> SleepAsync(int MS)
{
    return Task.Run(() =>
    {
        Thread.Sleep(MS);
        return MS / 1000;
    });
}
        private async void StatusLoopTimer_Tick(object sender, EventArgs e)
    {
        oSkype.CurrentUserStatus = TUserStatus.cusOnline;
        await SleepAsync(1000);
        oSkype.CurrentUserStatus = TUserStatus.cusDoNotDisturb;
        await SleepAsync(1000);
        oSkype.CurrentUserStatus = TUserStatus.cusAway;
        await SleepAsync(1000);
        oSkype.CurrentUserStatus = TUserStatus.cusInvisible;
        await SleepAsync(1000);
    }