在Blazor客户端中从长时间运行的后台任务中释放UI的推荐方法是什么

问题描述 投票:3回答:2

我们的Blazor(客户端)应用程序由UI上同时存在的许多组件组成。其中一个必须对Azure SQL进行大量数据调用。无论是否具有UI焦点,此组件都会执行这些调用。每次调用这些调用最多可能需要3秒才能返回其结果,在此期间它会使UI无响应。如何在不使用Blazor服务器端的情况下在这些调用期间保持UI响应。使用Task.Run等对单线程架构没有帮助。使用加载微调器也不是一种选择,因为这仍然会使UI无响应并且可能对用户不可见。在当前的Blazor 0.9.0中有没有办法实现这个目标?

运行最新的Blazor预览版(0.9.0-preview3-19154-02)

azure blazor
2个回答
2
投票

您可以使用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 ...");
                }
            });
    }
}

1
投票

如果异步调用没有帮助那么你可以使用浏览器工作者,只需要实现一些js互操作。

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