#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. Вот так просто! Спасибо!