每秒调用 StateHasChanged() 在 blazor web assembly 中是最佳的吗?

Calling StateHasChanged() every second is optimal in blazor web assembly?

我正在开发 blazor webassembly 应用程序。我需要在我的应用程序中显示当前 DateTime。以下是我如何使用纯 C#.

实现我的要求
@using System.Threading

<p>@CurrentDateTime</p>

@code {
    protected override void OnAfterRender(bool firstRender)
    {
        if (firstRender)
        {
            new Timer(DateTimeCallback, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));
        }
    }

    private void DateTimeCallback(object state)
    {
        CurrentDateTime = DateTimeOffset.UtcNow.ToString("dd MMM yyyy hh:mm:ss tt");
        StateHasChanged();
    }
}

这给出了准确的当前时间并且每秒更新一次。但是我有点担心每秒调用 StateHasChanged() 。它会影响 long 运行 的性能吗?或者我需要回退到 javascript 才能实现此功能?请提出您的意见。

But I'm little bit worried on calling StateHasChanged() every second.

别这样。每一毫秒都可能是个问题,每一秒都应该没问题。

一些改进:

  1. System.Threading.Timer 是 IDisposable。您应该在此页面中实现 Dispose 逻辑。参见

  2. 您应该将回调设为 async void,然后设为 await InvokeAsync(StateHasChanged); 目前这对 WebAssembly 没有影响,但有一天 Blazor/Wasm 会得到真正的线程,然后你的代码就会失败。 Blazor/server.

    已经需要 InvokeAsync()