非常简单的 SignalR 客户端更新 XAML UI
Extremely simeple SignalR Client to updating XMAL UI
我正在尝试从 PCL 获取 signalR 的最基本部分,发送消息,然后从集线器接收回消息并更新标签。
集线器方面的一切都运行良好,当我从条目发送消息并进行调试时,我可以看到新输入的消息从集线器返回。
奇怪的是,我需要按两次发送按钮,然后才能为第一条消息发送更新标签,然后任何其他发送都不会更新标签,但新输入的发送消息确实会从集线器返回在 MessageRecieved 部分。标签永远不会更新。有什么想法吗??。
由于最终解决方案不会非常复杂,所以我还没有走上使用视图模型的道路。在 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);
}
因为事件处理程序在不同的线程上运行,您需要从 UI 线程更新您的 UI 以使其立即生效。
将您的代码更改为:
ChatHubProxy.On("MessageReceived", (string username, string text) =>
{
Device.BeginInvokeOnMainThread (() => {
RecievedTxt.Text = text;
});
});
我正在尝试从 PCL 获取 signalR 的最基本部分,发送消息,然后从集线器接收回消息并更新标签。 集线器方面的一切都运行良好,当我从条目发送消息并进行调试时,我可以看到新输入的消息从集线器返回。
奇怪的是,我需要按两次发送按钮,然后才能为第一条消息发送更新标签,然后任何其他发送都不会更新标签,但新输入的发送消息确实会从集线器返回在 MessageRecieved 部分。标签永远不会更新。有什么想法吗??。
由于最终解决方案不会非常复杂,所以我还没有走上使用视图模型的道路。在 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);
}
因为事件处理程序在不同的线程上运行,您需要从 UI 线程更新您的 UI 以使其立即生效。
将您的代码更改为:
ChatHubProxy.On("MessageReceived", (string username, string text) =>
{
Device.BeginInvokeOnMainThread (() => {
RecievedTxt.Text = text;
});
});