Blazor — Как остановить таймер при выходе со страницы

#c# #timer #blazor

Вопрос:

У меня есть страница/компонент razor, которые запускают таймер в переопределенном методе OnInitializedAsync. Он использует клиент API для извлечения IEnumerable каждые 500 миллисекунд :

  protected override async Task OnInitializedAsync()
    {
        _interfaceConnections = await _client.GetAllInterfaceConnections();

        var timer = new Timer();
        timer.Elapsed  = new ElapsedEventHandler(UpdateConnections);
        timer.Interval = 500;
        timer.Enabled = true;
    }

    private async void UpdateConnections(object source, ElapsedEventArgs e)
    {
        _interfaceConnections = await _client.GetAllInterfaceConnections();

        await InvokeAsync(StateHasChanged);
    }
 

Как остановить этот таймер при переходе от этого компонента? Нет эквивалентного переопределения для OnUnloadedAsync или чего-то в этом роде. Поскольку этот таймер никогда не останавливается, он непрерывно вызывает базу данных и никогда не останавливается!

Ответ №1:

В верхней части раздела разметки

  @implements IDisposable
 

И в @коде

 // var timer = new Timer();
   _timer = new Timer();     // make it a field



public void Dispose()
{
   _timer?.Dispose();        // because you need it here
}
 

Комментарии:

1. Вот так просто! Спасибо!