Blazor 服务器端计时器是 运行 amok

Blazor Server Side Timer is running amok

我有这个 ServerSide Blazor 运行ning 并且我有:

listTimer = new System.Timers.Timer();
        listTimer.Interval = 1000;
        listTimer.Elapsed += async (s, e) =>
        {
            await Utils.LogToConsole(jsRuntime, DateTime.Now.ToString());
        }

    `

但是当我 运行 这时,我在 Chrome 控制台中获得了大量日志,但我希望每 1000 毫秒只看到日志。任何人都看到了这个问题并找到了解决方法。是的,我可以检查实际时间并进行比较,但我不喜欢它像疯了一样触发。

销毁组件时需要取消订阅timer-Event。最简单的方法是处理定时器本身。

@using System
@implements IDisposable

@code {
    public void Dispose()
    {
        listTimer?.Dispose();
    }
}

... I get huge amounts of log in the Chrome console

只有当您多次创建和分配计时器时才会发生这种情况。

你没有post那个代码,但我想你需要这样的东西:

if (listTimer == null)
{
    listTimer = new System.Timers.Timer();
    listTimer.Interval = 1000;
    listTimer.Elapsed += async (s, e) =>
    {
        await Utils.LogToConsole(jsRuntime, DateTime.Now.ToString());
    }
}

并且 Timer 是 IDisposable ,所以添加:

@implements IDisposable

并将此发送给@code:

public void Dispose()
{
    listTimer?.Dispose();
}