2

我有这个 ServerSide Blazor 正在运行,我有:

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

    `

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

4

2 回答 2

4

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

@using System
@implements IDisposable

@code {
    public void Dispose()
    {
        listTimer?.Dispose();
    }
}
于 2020-06-22T11:11:45.267 回答
2

...我在 Chrome 控制台中获得大量日志

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

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

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();
}
于 2020-06-22T12:22:26.697 回答