You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 9 MAUI Hybrid Blazor:方法执行中途更新UI失效求助

问题原因

你这段代码的核心问题是同步方法阻塞了UI线程:

  • IncrementCount是同步方法,执行到Thread.Sleep(1000)时会直接卡住UI线程,此时即使调用了StateHasChanged(),UI也没有机会处理更新请求。
  • 等到整个方法执行完毕,ButtonText已经被重新设回"Click",所以你看不到中间的"Running"状态。
解决方法

把同步方法改成异步方法,用await Task.Delay()替代Thread.Sleep(),这样不会阻塞UI线程,让UI能及时更新状态:

@page "/counter"

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">@ButtonText</button>

@code {
private int currentCount = 0;

private string ButtonText = "Click";

// 改成异步方法,返回Task
private async Task IncrementCount()
{
    ButtonText = "Running";
    StateHasChanged(); // 立即通知UI更新
    
    // 用await Task.Delay替代Thread.Sleep,不会阻塞UI线程
    await Task.Delay(1000);
    
    currentCount++;
    ButtonText = "Click";
    StateHasChanged(); // 处理完成后更新UI
}
}
关键要点
  • MAUI Hybrid中的Blazor组件支持异步事件处理方法,直接返回Task即可,无需额外处理。
  • Task.Delay()是异步等待,会释放UI线程去处理更新请求;而Thread.Sleep()是同步阻塞,会卡住UI无法响应状态变化。
  • 虽然简单场景下修改绑定属性后Blazor会自动调用StateHasChanged(),但在异步操作前手动调用能确保UI立即响应状态变化。

内容的提问来源于stack exchange,提问作者Rob White

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:02:46