Проблема с SignalR/многопоточностью и обновлением пользовательского интерфейса.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с SignalR/многопоточностью и обновлением пользовательского интерфейса.

Сообщение Anonymous »

Я думаю, что у меня проблема с SignalR/многопоточностью и обновлением пользовательского интерфейса.
Но я не могу понять, почему, когда я получаю сообщение от своего хаба, список сообщений пользовательского интерфейса не обновляется. 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);
}

Похоже, await InvokeAsync(StateHasChanged); не волшебным образом снова отображает список.
Я пытался выполнить обновление списка с помощью простой кнопки, добавляющей поддельные данные. И он работает просто отлично. Забавный факт: когда я делаю это при отладке с двумя точками останова, я не вижу одного и того же содержимого внутри списка, когда я использую метод обновления кнопки и когда я использую метод обновления сигнала. Вот почему я думаю о проблеме многопоточности, и в частности о проблеме, когда это не событие пользовательского интерфейса.
Я видел здесь подобные проблемы, но не нашел ответов на свою проблему.
Вот мой вид в режиме отладки (я знаю, что элемент добавлен в список):
[img]https://i.sstatic .net/jhLkVMFd.png[/img]
Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... ui-refresh
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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