azure - 从 Blazor 客户端中长时间运行的后台任务中释放 UI 的推荐方法是什么
问题描述
我们的 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 ...");
}
});
}
}
推荐阅读
- javascript - 在以下 Vue.js 方法中,对象数组没有被过滤,过滤项目中的值也没有被改变
- java - 如何为 java netbeans 应用程序设置在线数据库
- javascript - 没有为箭头键触发 jQuery 输入事件
- python - 使用 Django 搜索的子字符串
- node.js - 如何编写单元测试以启用正常关机
- c# - 如何解决 NuGet.targets(124,5):错误:值不能 > null。(参数“文件夹名称”)错误?
- amazon-web-services - aws 在 shell 脚本中承担角色不承担该角色
- odoo - Odoo 序列重置坚持使用 UTC
- python - TCP Server 按需与 Client 通信
- c++ - 垂直方向的 Gtk3+ Spinbutton (c/c++)