.NET 9.0 的 Blazor Web App 项目,进度条 <progress> 组件使用注意事项

一、执行过程中,要刷新 进度条 的显示,需要 延时、释放,否则进度条不 实时 更新,最后一下到 100%

cs 复制代码
 // 延时,释放给前端:【必须】,否则进度条不 实时 更新,最后一下到 100
 await Task.Delay(1);

二、执行过程中,需要 通知 Blazor 更新 UI,否则不 实时 更新

cs 复制代码
// 通知 Blazor 更新 UI:【必须】,否则不 实时 更新
StateHasChanged();

三、如果是单击执行,执行过程中,应该禁用 按钮,防止没有执行完毕就再次进入

cs 复制代码
// 禁用按钮
IsButtonDisabled = true;

四、示例程序

cs 复制代码
@page "/progress-demo"

<h3>进度条示例</h3>

<br />

<button @onclick="StartCalculation" disabled="@IsButtonDisabled">开始计算</button>

<br />
<br />

<progress value="@progressValue" max="100"></progress>

<p>进度: @progressValue%</p>

@code {
    private bool IsButtonDisabled { get; set; } = false;

    // 模拟 费时 计算
    void Calculation()
    {
        double d = 1.1;
        for (int i = 0; i < 1000000; i++)
        {
            d *= 9.9;
        }
    }

    // 进度条数值变量
    private int progressValue = 0;

    private async Task StartCalculation()
    {
        // 禁用按钮
        IsButtonDisabled = true;

        // 重置进度条
        progressValue = 0;
        // 开始 多次 费时 操作
        for (int i = 1; i <= 1000; i++)
        {
            // 这儿时 具体 费时 操作代码
            Calculation();

            // 更新一次进度条
            if (i % 10 == 0)
            {
                // 更改进度条数值
                progressValue++;
                // 输出到 Console 观察实际进度
                System.Console.WriteLine($"progressValue = {progressValue}, i = {i}");
                // 延时,释放给前端:【必须】,否则进度条不 实时 更新,最后一下到 100
                await Task.Delay(1);
                // 通知 Blazor 更新 UI:【必须】,否则不 实时 更新
                StateHasChanged();
            }
        }
        // 计算完成,确保 进度条 设置为 100%
        progressValue = 100;

        // 重新启用按钮
        IsButtonDisabled = false;
        await Task.FromResult(true);
    }
}
相关推荐
benbenAItalk2 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_962885722 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎12343 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易5 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周5 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师6 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing986 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan6 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡7 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒7 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端