非常simeple SignalR客户端更新XMAL UI

时间:2017-07-24 22:15:22

标签: xamarin.forms signalr signalr.client

我试图从PCL获取signalR的最基本部分,发送消息,然后从集线器接收消息并更新标签。 事物中心端的一切都很完美,当我从条目发送消息并调试时,我可以看到新输入的消息从集线器回来。

奇怪的是,我需要在第一个消息发送更新标签之前按两次发送按钮,然后任何其他发送不更新标签,但新输入的发送消息确实从集线器返回MessageRecieved Part。标签永远不会更新。任何想法??。

由于最终的解决方案不会疯狂复杂,我已经走上了使用viewmodel的道路。在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 个答案:

答案 0 :(得分:1)

因为事件处理程序在不同的线程上运行,所以您需要从UI线程更新UI以使其立即生效。

将您的代码更改为:

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

});