.NET Maui Hybrid,Blazor 更新 UI 中间方法

问题描述 投票:0回答:1

我有一个需要几秒钟处理的方法。单击按钮时,我希望它更新 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";

private void IncrementCount()
{
    ButtonText = "Running";
    StateHasChanged();
    currentCount++;
    Thread.Sleep(1000);
    ButtonText = "Click";
    StateHasChanged();
}
}

我显然不明白线程处理什么的。在示例中,按钮文本不会更改。

运行 .NET 9 Maui Hybrid。

c# blazor maui hybrid
1个回答
0
投票

线程.睡眠(1000);

此调用会将当前线程(在本例中为 UI 线程)挂起指定的时间。这就是按钮文本永远不会更新为“正在运行”的原因。因为在 UI 更新之前,UI 线程会被 Thread.Sleep() 立即挂起。 如果您的目标是延迟执行特定时间,那么您应该使该方法异步并等待

Task.Delay()

调用,如下所示。 private async void IncrementCount() { ButtonText = "Running"; StateHasChanged(); currentCount++; await Task.Delay(1000); ButtonText = "Click"; StateHasChanged(); }

	
© www.soinside.com 2019 - 2024. All rights reserved.