Очень простой SignalR Client для обновления пользовательского интерфейса XMAL

Я пытаюсь получить основную часть сигнала R, работающую от PCL, отправить сообщение, а затем получить сообщение обратно из концентратора и обновить метку. Все со стороны концентратора работает отлично, когда я отправляю сообщение из Entry и отлаживаю, я вижу, что вновь введенное сообщение возвращается из концентратора.

Странно то, что мне нужно дважды нажать кнопку отправки, прежде чем метка будет обновлена ​​для первой отправки сообщения, затем любая другая отправка не обновит метку, но вновь введенное сообщение отправки действительно возвращается из концентратора в части MessageRectained. Метка никогда не обновляется. Есть идеи??.

Поскольку конечное решение не будет сумасшедшим комплексом, я не пошел по пути использования модели представления. Я обновлял метки из этого кода много раз после ответа http.

Вот мой код

private HubConnection Connection = new HubConnection("http://*******");
private IHubProxy ChatHubProxy;

public RealTime()
{
     InitializeComponent();

     ChatHubProxy = Connection.CreateHubProxy("SynapseVerificationHub");

     Connection.Start();

     ChatHubProxy.On("MessageReceived", (string username, string text) =>
     {

     RecievedTxt.Text = text;

     });

 }

 private void Button_Clicked(object sender, EventArgs e)
 {
      ChatHubProxy.Invoke("SendMessage", "Kosta", KostaMessageTxt.Text);
 }

1 ответ

Решение

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

Измените свой код на это:

ChatHubProxy.On("MessageReceived", (string username, string text) =>
{
    Device.BeginInvokeOnMainThread (() => {
        RecievedTxt.Text = text;
    });

});
Другие вопросы по тегам