Очень простой 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;
});
});