Задержка задачи в Blazor без блокировки пользовательского интерфейса - PullRequest
2 голосов
/ 09 октября 2019

Я создал компонент уведомления .razor в Blazor и пытаюсь автоматически закрыть div уведомления через xx секунд.

Пока он работает с этим методом

 private async Task CloseToast(Guid Id, bool autoclose = false)
{
    if (autoclose)
    {
        await Task.Delay(TimeSpan.FromSeconds(5));
    }

   //Code to remove the notification from list
    StateHasChanged();
}

проблема заключается в том, что в течение 5 секунд привязка данных пользовательского интерфейса застревает, любое одностороннее или двустороннее обновление привязки к переменным (текстовые поля и т. д.) находится в режиме ожидания, пока не будет закрыто уведомление и задача не возобновится.

Какможно запустить метод или блок кода через xx секунд, не блокируя основную задачу пользовательского интерфейса в Blazor?

1 Ответ

1 голос
/ 10 октября 2019

Компонент с таймером, который отсчитывает время назад


<h3>@Time</h3>

@code {
    [Parameter] public int Time { get; set; } = 5;

    public async void StartTimerAsync()
    {
        while (Time > 0)
        {
            Time--;
            StateHasChanged();
            await Task.Delay(1000);
        }
    }

    protected override void OnInitialized()
        => StartTimerAsync();
}

Использование:

<Component />
<Component Time="7"/>

Проверено на стороне клиента Blazor. Должен вести себя так же в серверной части Blazor. Надеюсь, это поможет

...