我需要使用每秒计时器来动态更新DOM值。

我尝试每秒增加一个计数器值。但是在该代码中,我只有该DOM值的最终值。我需要DOM中的第二个值。

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="StartLiveUpdate">Click me</button>

<button class="btn btn-primary" @onclick="StopLiveUpdate">Stop</button>

@code {


    private static System.Timers.Timer syncTimer;
    Random random = new Random();
    void StartLiveUpdate()
    {
        syncTimer = new System.Timers.Timer(1000);

        syncTimer.Elapsed += IncrementCount;
        syncTimer.AutoReset = true;
        syncTimer.Enabled = true;
    }
    void StopLiveUpdate()
    {
        syncTimer.Enabled = false;
        syncTimer.Stop();
    }
    int currentCount = 0;

    void IncrementCount(Object source, System.Timers.ElapsedEventArgs e)
    {
        currentCount++;
        this.StateHasChanged();
    }
}

最佳答案

运行上面的代码,我会收到IncrementCount函数引发的以下异常:


  System.InvalidOperationException:'当前线程未与Dispatcher关联。触发呈现或组件状态时,请使用InvokeAsync()将执行切换到分派器。


将StateHasChanged调用传递给InvokeAsync可解决此问题:

InvokeAsync(this.StateHasChanged);

10-06 00:22