Server Blazor服务器端计时器正在疯狂运行

Server Blazor服务器端计时器正在疯狂运行,server,blazor,system.timers.timer,Server,Blazor,System.timers.timer,我有这个服务器端Blazor正在运行,我有: listTimer = new System.Timers.Timer(); listTimer.Interval = 1000; listTimer.Elapsed += async (s, e) => { await Utils.LogToConsole(jsRuntime, DateTime.Now.ToString()); } ` 但是当

我有这个服务器端Blazor正在运行,我有:

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

    `

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

在处理组件时,您必须取消订阅计时器事件。最简单的方法是处理计时器本身

@using System
@implements IDisposable

@code {
    public void Dispose()
    {
        listTimer?.Dispose();
    }
}
。。。我在Chrome控制台中获得了大量日志

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

您没有发布该代码,但我想您需要类似以下内容:

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

我有3.1.300preview015048@PeterMorris感谢您的评论,您的解决方案更好。我已经更新了我的答案。非常感谢。我已经做了更多的Blazor WASM,但现在我更了解Blazor服务器的本质:-)您也必须处理计时器,否则它将永远挂起是的,您还需要一个dispose()。但这并不是直接原因。