在做WPF桌面项目的时候,经常会遇到需要等待几秒完成其他操作。
C#常用的方法有:
1.System.Threading.Thread.Sleep()
System.Threading.Thread.Sleep()
在指定的时间范围内,不会将线程计划为由操作系统执行。 此方法更改线程的状态以包括 WaitSleepJoin 。
可以指定 Timeout.Infinite 参数 millisecondsTimeout 以无限期挂起线程。 但是,我们建议你改为使用其他类(如 System.Threading Mutex 、、 或 ) Monitor EventWaitHandle Semaphore 来同步线程或管理资源。
系统时钟时钟时钟计时周期,以称为时钟分辨率的特定速率。 实际超时值可能不完全是指定的超时值,因为指定的超时值将调整为与时钟计时周期一致。 有关时钟分辨率和等待时间详细信息,请参阅系统 API 中的Sleep Windows函数。
此方法不执行标准 COM 和 SendMessage 抽取。
2.while循环
while (条件)
{
满足条件后结束循环
}
使用以上方法等待会造成程序的界面卡住一段时间无法操作,如果我们在WPF中使用对用户的体验非常的不友好,等待时间长用户可能认为你的程序已经卡死或者退出。那么就没有办法既能等待操作、程序还不会假死吗?
答案是“有” ,使用**Task.Delay(1000)**方法创建将在时间延迟后完成的任务。
Task.Delay(你需要等待的时间);
异步等待,如果你需要等待延时前面加上await就可以了。
await Task.Delay(你需要等待的时间);
在完成返回的任务前要等待的毫秒数;如果无限期等待,则为 -1