Обновление таблицы таймера Blazor 8 без нажатия кнопкиC#

Место общения программистов C#
Ответить
Anonymous
 Обновление таблицы таймера Blazor 8 без нажатия кнопки

Сообщение Anonymous »

У меня Blazor 8 с InteractiveServerMode. У меня есть таблица, показывающая задания, которые должен выполнять сервер. Задания могут добавляться каждые 20 секунд (или другая программа проверяет, добавлены ли какие-либо новые задания, и добавляет их в базу данных, если они есть каждые 20 секунд).
Я пытался добавить таймер в 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]

}


}
Код C#:

Код: Выделить всё

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);
}
Текст «in getjob» выводится на консоль каждые 20 секунд, поэтому таймер работает, но таблица вообще не отображается.
У меня есть:

Код: Выделить всё

@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;
}
Без изменений. Текст Console.Writeline выводится на консоль, но таблица не отображается.

Подробнее здесь: https://stackoverflow.com/questions/791 ... tton-click
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»