slider滑块async await
isselectionrangeenabled 特色属性
实际场景
视频缓存进度和观看进度
scrollbar 也可以
<StackPanel>
<!-- 选择范围头尾相同,但 Slider 仍可操作 -->
<Slider IsSelectionRangeEnabled="True"
SelectionStart="30" SelectionEnd="30"
Minimum="0" Maximum="100" Value="50"/>
<!-- 真正禁用 Slider -->
<Slider IsEnabled="False" Value="50" Margin="0,10"/>
</StackPanel>
禁用slider实现progressbar
progressbar
作用 loading条
属性 isindeterminate True
绿色条从左到右
orientation horizontal
窗口.loaded
主程序this.loaded
和textbox 混合使用
textbox显示progressbar的value
// 设置进度条的最大值(总进度)
progressBar.Maximum = max;
// 使用Task.Run在后台线程执行异步任务,避免阻塞UI线程
Task.Run(async () =>
{
// 循环从0到100,模拟进度更新
for (int i = 0; i <= 100; i++)
{
// 使用Dispatcher.Invoke切换到UI线程,因为UI控件只能在UI线程更新
await Dispatcher.Invoke(async () =>
{
// 更新进度条的当前值
progressBar.Value = i;
// 计算当前进度百分比(i/max),格式化为百分比字符串(如"50%")
// 乘以1.0确保进行浮点数除法而不是整数除法
txtInfo.Text = (i * 1.0 / max).ToString("p");
});
这里必须要1.0 这样才能出现小数
// 每次更新后延迟200毫秒,模拟耗时操作
// 使用await确保非阻塞延迟,不会冻结UI
await Task.Delay(200);
}
});
把阻塞的进程放到后台 前台只用更新ui
task run启动 task delay停止
阻塞和非阻塞
都是async() await停止