Blazor Server как обновлять периодически страницу
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 28.04.23 12:02
Оценка:
Данные периодически обновляются в словаре через Quartz, но это происходит асинхронно в задаче, а как данные на странице при этом обновлять? То есть когда идёт обновление в задаче Quartz?
Re: Blazor Server как обновлять периодически страницу
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.04.23 19:06
Оценка: -1
Здравствуйте, dsalodki, Вы писали:

D>Данные периодически обновляются в словаре через Quartz, но это происходит асинхронно в задаче, а как данные на странице при этом обновлять? То есть когда идёт обновление в задаче Quartz?

SignalR
https://infinum.com/blog/real-time-data-blazor-webassembly-signalr/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.04.2023 14:07 Serginio1 . Предыдущая версия . Еще …
Отредактировано 28.04.2023 19:09 Serginio1 . Предыдущая версия .
Re: Blazor Server как обновлять периодически страницу
От: pilgrim_ Россия  
Дата: 28.04.23 19:46
Оценка: 12 (1)
Здравствуйте, dsalodki, Вы писали:

D>Данные периодически обновляются в словаре через Quartz, но это происходит асинхронно в задаче, а как данные на странице при этом обновлять? То есть когда идёт обновление в задаче Quartz?


Уведомляй компонент из асинхронной задачи через колбэк, в котором уведоми компонент, что состояние изменилось и нужно перерисоваться с пом. StateHasChanged:

await InvokeAsync(StateHasChanged);
Re: Blazor Server как обновлять периодически страницу
От: vaa  
Дата: 28.04.23 23:26
Оценка:
Здравствуйте, dsalodki, Вы писали:

D>Данные периодически обновляются в словаре через Quartz, но это происходит асинхронно в задаче, а как данные на странице при этом обновлять? То есть когда идёт обновление в задаче Quartz?


для передачи событий лучше всего использовать синглтон сервис через интерфейс
interface Events {
    event Action E1;
    void FireE1;
}

// в компоненте
...Initialize()
{
 events.E1+= OnE1; }
async void OnE1() { await InvokeAsync(StateHashChanged);
}
void Dispose () => events.E1 -= OnE1;
//в другом сервисе
events.FireE1();


либо использовать reactiveUI
или https://github.com/kekekeks/NObservable
✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Blazor Server как обновлять периодически страницу
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.04.23 14:00
Оценка:
Здравствуйте, pilgrim_, Вы писали:

_>Уведомляй компонент из асинхронной задачи через колбэк, в котором уведоми компонент, что состояние изменилось и нужно перерисоваться с пом. StateHasChanged:


_>
_>await InvokeAsync(StateHasChanged);
_>


Что бы вызвать StateHasChanged, нужно получить событие с сервера или иной системы. Я так понял, на сервере обновились данные и надо сообщить клиентам, что бы обновились.
Я давно не брал в руки блазор. Многое конечно изменилось

https://infinum.com/blog/real-time-data-blazor-webassembly-signalr/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.04.2023 14:02 Serginio1 . Предыдущая версия .
Re[3]: Blazor Server как обновлять периодически страницу
От: pilgrim_ Россия  
Дата: 29.04.23 15:36
Оценка: 18 (1)
Здравствуйте, Serginio1, Вы писали:

S>Что бы вызвать StateHasChanged, нужно получить событие с сервера или иной системы. Я так понял, на сервере обновились данные и надо сообщить клиентам, что бы обновились.

S>Я давно не брал в руки блазор. Многое конечно изменилось

S>https://infinum.com/blog/real-time-data-blazor-webassembly-signalr/


Речь идёт о Blazor Server, вся движуха (изменение данных, обновление UI) происходит в одном процессе.
Re[4]: Blazor Server как обновлять периодически страницу
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.04.23 15:56
Оценка:
Здравствуйте, pilgrim_, Вы писали:

S>>Что бы вызвать StateHasChanged, нужно получить событие с сервера или иной системы. Я так понял, на сервере обновились данные и надо сообщить клиентам, что бы обновились.

S>>Я давно не брал в руки блазор. Многое конечно изменилось

S>>https://infinum.com/blog/real-time-data-blazor-webassembly-signalr/


_>Речь идёт о Blazor Server, вся движуха (изменение данных, обновление UI) происходит в одном процессе.

То есть через тот же SignalR(Websocket) внутри?

https://infinum.com/blog/real-time-data-blazor-webassembly-signalr/

Blazor Server
This option hosts Razor components in the ASP.NET Core Web App, which means that the application is 100% run on the server. Blazor Server uses SignalR to communicate between the server and the client via the WebSockets protocol. It allows for full .NET API compatibility.

With Blazor Server, each new browser window requires a new instance of a server-managed component state. Because of that, there is a constant bi-directional connection between the client and server, so it would be smart to consider scaling the application.

Спасибо
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.04.2023 16:08 Serginio1 . Предыдущая версия .
Re[5]: Blazor Server как обновлять периодически страницу
От: pilgrim_ Россия  
Дата: 04.05.23 01:45
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

_>>Речь идёт о Blazor Server, вся движуха (изменение данных, обновление UI) происходит в одном процессе.

S>То есть через тот же SignalR(Websocket) внутри?

Скорее снаружи, ну да, SignalR используется как транспорт для взаимодействия с клиентом (браузером). Вопрос же ТС был как уведомить компонент о том, что что-то поменялось, это уведомление делается в рамках процесса Blazor сервера. А уж сам Blazor сервер при этом посылает необходимые изменения на клиент с пом. SignalR, но для разработчика Blazor сервера это имхо маловажные детали (хотя знать об этом желательно), т.к. возможны реализации Blazor inproc-сервер напр. для десктопа, где транспорт может быть иной (прямые вызовы методов обновления UI).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.