我们的Blazor(客户端)应用程序由UI上同时存在的许多组件组成。其中之一必须对Azure SQL进行大量的大数据调用。不管它是否具有UI焦点,此组件都将执行这些调用。这些调用中的每个调用最多可能需要3秒钟才能返回其结果,在此期间它将使UI失去响应。在不使用Blazor服务器端的情况下,如何在这些调用期间使UI保持响应。使用Task.Run等在单线程体系结构中无济于事。使用加载微调器也不是一种选择,因为这仍然会使UI无响应,并且可能对用户不可见。在当前的Blazor 0.9.0中,有什么方法可以实现这一目标?
运行最新的Blazor预览版本(0.9.0-preview3-19154-02)
您可以使用Invoke,我修改了counter示例页面来说明它,您将需要一种单例 DI 对象来避免运行该进程两次。
记住Blazor是一个实验项目。另外,这个答案也是一种实验方法。
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
@functions {
int currentCount = 0;
void IncrementCount()
{
currentCount++;
}
protected override void OnInit()
{
Invoke(
//here your task.
async () =>
{
for(var i =0; i< 50; i++)
{
await Task.Delay(1000);
currentCount++;
StateHasChanged();
System.Console.WriteLine("Still running ...");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |