SignalR自主窗口窗体 - 集线器与GUI之间的UI交互

时间:2015-07-30 13:44:30

标签: c# signalr signalr-hub signalr.client

您好我创建了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);
    }
}

1 个答案:

答案 0 :(得分:1)

我刚开始玩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;}
    }
}