SignalR自宿主窗口形式-集线器和GUI之间的UI交互
本文关键字:GUI 之间 交互 UI 集线器 宿主 窗口 SignalR | 更新日期: 2023-09-27 18:05:45
嗨,我已经创建了2个winform应用程序,一个作为服务器(自主机)和一个作为客户端。我的服务器应用程序有一个按钮来停止和启动服务器/集线器和一个文本框来显示日志信息。
我可以成功地在两个应用程序之间发送消息,也就是说客户端从服务器接收消息,反之亦然,这工作得很好,但我唯一的查询是什么是允许中心的首选方式,当消息被发送或接收时,在文本框中显示,用于调试/信息目的。
我如何将从集线器的方法生成的文本推到GUI的文本框控件?
我的代码是这样的:
Winform GUI代码
public partial class Form2 : Form
{
private IDisposable _SignalR;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this._SignalR = WebApp.Start<Startup>("http://localhost:8080");
}
}
Startup是初始化Hub的类名
public class Startup
{
public void Configuration(IAppBuilder app)
{
try
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
HubConfiguration hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
EnableJSONP = true
};
map.RunSignalR(hubConfiguration);
});
}
catch(Exception)
{
throw;
}
}
}
我的Hub类(TestHub)看起来像这样,我已经指出了我想把字符串管道到GUI的地方:
public class TestHub : Hub
{
public override Task OnConnected()
{
string message = string.Format("Client connected: {0}", Context.ConnectionId);
// Want to send details of connected user to GUI
return base.OnConnected();
}
public override Task OnDisconnected(bool graceFull)
{
string message = string.Format("Client disconnected: {0}", Context.ConnectionId);
// Want to send details of disconnected user to GUI
return base.OnDisconnected(graceFull);
}
public void SendAll(string message)
{
// Want to send details of actionto GUI
Clients.All.addMessage(message);
}
}
我刚刚开始玩SignalR自己,所以我理解你的困惑。我把对我最有帮助的资源的链接以及你的具体例子的答案。
http://www.asp.net/signalr/overview/guide-to-the-api工作示例:https://code.msdn.microsoft.com/Using-SignalR-in-WinForms-f1ec847b/file/119892/19/Using%20SignalR%20in%20WinForms%20and%20WPF.zip
public partial class Form2 : Form
{
private IDisposable _SignalR;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this._SignalR = new HubConnection("http://localhost:8080").CreateHubProxy("TestHub");
this._SignalR.On<string>("SendAll", message => { textbox1.Text = message;}
}
}