您好我有一个包含以下代码的程序
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。 我该怎么做才能阻止滞后?
答案 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);
}