WPF 优雅等待、延时Task

在WPF应用开发中,使用Thread.Sleep()或while循环进行等待会导致界面卡死,影响用户体验。文章介绍了如何通过Task.Delay()实现异步等待,以在等待期间保持界面的响应性。这种方法允许程序在等待期间继续处理UI更新,提供更好的交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做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

MSDN介绍关于Task.Delay

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值