Но я не могу понять, почему, когда я получаю сообщение от своего хаба, список сообщений пользовательского интерфейса не обновляется. p>
Я использую сервер Blazor.
Вот интересная часть моего файла Razor:
Код: Выделить всё
@page "/chat"
@rendermode InteractiveServer
[list]
@foreach (var message in messages)
{
[*]@message
}
[/list]
Код: Выделить всё
private readonly List messages = [];
protected override async Task OnInitializedAsync()
{
hubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("WHATEVER"), options =>
{
options.AccessTokenProvider = async () => Task.FromResult("MYTOKEN")
})
.Build();
hubConnection.On("ReceiveMessageAsync", ReceivedNewMessage);
await hubConnection.StartAsync();
}
private async Task ReceivedNewMessage(string username, string message)
{
var encodedMsg = $"{username}: {message}";
messages.Add(encodedMsg);
await InvokeAsync(StateHasChanged);
}
Я пытался выполнить обновление списка с помощью простой кнопки, добавляющей поддельные данные. И он работает просто отлично. Забавный факт: когда я делаю это при отладке с двумя точками останова, я не вижу одного и того же содержимого внутри списка, когда я использую метод обновления кнопки и когда я использую метод обновления сигнала. Вот почему я думаю о проблеме многопоточности, и в частности о проблеме, когда это не событие пользовательского интерфейса.
Я видел здесь подобные проблемы, но не нашел ответов на свою проблему.
Вот мой вид в режиме отладки (я знаю, что элемент добавлен в список):
[img]https://i.sstatic .net/jhLkVMFd.png[/img]

Подробнее здесь: https://stackoverflow.com/questions/791 ... ui-refresh