Я пытался добавить таймер в Blazor site, чтобы он перепроверил базу данных на наличие обновлений. Но я не могу обновить таблицу.
Все работает без таймера (таблица заполняется заданиями, которые есть в базе данных), но если я добавляю таймер, таблица не заполняется.
html:
Код: Выделить всё
@if (jobsToDo.Count == 0)
{
Loading...
}
else
{
Id
Name
Priority
Est. Time
Owner
@foreach (var job in jobsToDo)
{
@job.Id
@job.Name
@job.Priority
@if (job.Priority != 1)
{
[i][/i]
}
@if (job.Priority != jobsToDo.Count)
{
[i][/i]
}
@job.EstimetedTime
@job.Owner
[i][/i]
}
}
Код: Выделить всё
private List jobsToDo = new List();
protected override async Task OnInitializedAsync()
{
Timer();
}
private void Timer()
{
Timer timer = new Timer(20000);
timer.Enabled = true;
timer.Elapsed += async (sender, e) => await GetJobsToDo();
timer.Start();
timer.AutoReset = true;
}
private async Task GetJobsToDo()
{
Console.WriteLine("in getjob");
using JobsContext db = DbFactory.CreateDbContext();
jobsToDo = await db.JobToDo.ToListAsync();
jobsToDo = jobsToDo.OrderBy(j => j.Priority).ToList();
await InvokeAsync(StateHasChanged);
}
У меня есть:
Код: Выделить всё
@rendermode InteractiveServer
@attribute [StreamRendering(true)]
Если я добавлю GetJobsToDo() в OnInitializedAsync(), таблица заполнится. События @onclick также обновляют таблицу.
Что мне не хватает?? Пожалуйста, помогите!
ОБНОВЛЕНИЕ:
Я просмотрел похожий вопрос и попробовал:
Код: Выделить всё
private void Timer()
{
Timer timer = new Timer(20000);
timer.Enabled = true;
timer.Elapsed += async (sender, e) =>
{
await GetJobsToDo();
await InvokeAsync(StateHasChanged);
};
timer.Start();
timer.AutoReset = true;
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... tton-click
Мобильная версия