zoukankan      html  css  js  c++  java
  • .Net Framework 平台下创建WinForm窗体SignalR客户端

    1、新建WinForm窗体应用程序, .Net Framework 平台

    2、Nuget包安装

    Microsoft.AspNetCore.SignalR.Client 

    3、修改Form1.Designer.cs 文件

    复制代码
     partial class Form1
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows 窗体设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要修改
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.addressTextBox = new System.Windows.Forms.TextBox();
                this.connectButton = new System.Windows.Forms.Button();
                this.label1 = new System.Windows.Forms.Label();
                this.messagesList = new System.Windows.Forms.ListBox();
                this.sendButton = new System.Windows.Forms.Button();
                this.messageTextBox = new System.Windows.Forms.TextBox();
                this.disconnectButton = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // addressTextBox
                // 
                this.addressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.addressTextBox.Location = new System.Drawing.Point(66, 10);
                this.addressTextBox.Name = "addressTextBox";
                this.addressTextBox.Size = new System.Drawing.Size(521, 20);
                this.addressTextBox.TabIndex = 0;
                this.addressTextBox.Enter += new System.EventHandler(this.addressTextBox_Enter);
                // 
                // connectButton
                // 
                this.connectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
                this.connectButton.Location = new System.Drawing.Point(593, 8);
                this.connectButton.Name = "connectButton";
                this.connectButton.Size = new System.Drawing.Size(75, 23);
                this.connectButton.TabIndex = 1;
                this.connectButton.Text = "Connect";
                this.connectButton.UseVisualStyleBackColor = true;
                this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(12, 13);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(48, 13);
                this.label1.TabIndex = 2;
                this.label1.Text = "Address:";
                // 
                // messagesList
                // 
                this.messagesList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.messagesList.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
                this.messagesList.FormattingEnabled = true;
                this.messagesList.Location = new System.Drawing.Point(15, 36);
                this.messagesList.Name = "messagesList";
                this.messagesList.SelectionMode = System.Windows.Forms.SelectionMode.None;
                this.messagesList.Size = new System.Drawing.Size(734, 485);
                this.messagesList.TabIndex = 3;
                this.messagesList.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.messagesList_DrawItem);
                // 
                // sendButton
                // 
                this.sendButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
                this.sendButton.Enabled = false;
                this.sendButton.Location = new System.Drawing.Point(674, 532);
                this.sendButton.Name = "sendButton";
                this.sendButton.Size = new System.Drawing.Size(75, 23);
                this.sendButton.TabIndex = 5;
                this.sendButton.Text = "Send";
                this.sendButton.UseVisualStyleBackColor = true;
                this.sendButton.Click += new System.EventHandler(this.sendButton_Click);
                // 
                // messageTextBox
                // 
                this.messageTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.messageTextBox.Enabled = false;
                this.messageTextBox.Location = new System.Drawing.Point(15, 534);
                this.messageTextBox.Name = "messageTextBox";
                this.messageTextBox.Size = new System.Drawing.Size(653, 20);
                this.messageTextBox.TabIndex = 4;
                this.messageTextBox.Enter += new System.EventHandler(this.messageTextBox_Enter);
                // 
                // disconnectButton
                // 
                this.disconnectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
                this.disconnectButton.Enabled = false;
                this.disconnectButton.Location = new System.Drawing.Point(674, 8);
                this.disconnectButton.Name = "disconnectButton";
                this.disconnectButton.Size = new System.Drawing.Size(75, 23);
                this.disconnectButton.TabIndex = 6;
                this.disconnectButton.Text = "Disconnect";
                this.disconnectButton.UseVisualStyleBackColor = true;
                this.disconnectButton.Click += new System.EventHandler(this.disconnectButton_Click);
                // 
                // ChatForm
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(761, 566);
                this.Controls.Add(this.disconnectButton);
                this.Controls.Add(this.sendButton);
                this.Controls.Add(this.messageTextBox);
                this.Controls.Add(this.messagesList);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.connectButton);
                this.Controls.Add(this.addressTextBox);
                this.Name = "ChatForm";
                this.Text = "SignalR Chat Sample";
                this.Load += new System.EventHandler(this.ChatForm_Load);
                this.ResumeLayout(false);
                this.PerformLayout();
            }
            private System.Windows.Forms.TextBox addressTextBox;
            private System.Windows.Forms.Button connectButton;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.ListBox messagesList;
            private System.Windows.Forms.Button sendButton;
            private System.Windows.Forms.TextBox messageTextBox;
            private System.Windows.Forms.Button disconnectButton;
            #endregion
        }
    复制代码

    4、修改Form1.cs文件

    复制代码
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private HubConnection _connection;
    
    
            private void ChatForm_Load(object sender, EventArgs e)
            {
                addressTextBox.Focus();
            }
    
            private void addressTextBox_Enter(object sender, EventArgs e)
            {
                AcceptButton = connectButton;
            }
    
            private async void connectButton_Click(object sender, EventArgs e)
            {
                UpdateState(connected: false);
    
                _connection = new HubConnectionBuilder()
                    .WithUrl(addressTextBox.Text)
                    .Build();
    
                _connection.On<string, string>("myMessage", (s1, s2) => OnSend(s1, s2));
    
                Log(Color.Gray, "Starting connection...");
                try
                {
                    await _connection.StartAsync();
                }
                catch (Exception ex)
                {
                    Log(Color.Red, ex.ToString());
                    return;
                }
    
                Log(Color.Gray, "Connection established.");
    
                UpdateState(connected: true);
    
                messageTextBox.Focus();
            }
    
            private async void disconnectButton_Click(object sender, EventArgs e)
            {
                Log(Color.Gray, "Stopping connection...");
                try
                {
                    await _connection.StopAsync();
                }
                catch (Exception ex)
                {
                    Log(Color.Red, ex.ToString());
                }
    
                Log(Color.Gray, "Connection terminated.");
    
                UpdateState(connected: false);
            }
    
            private void messageTextBox_Enter(object sender, EventArgs e)
            {
                AcceptButton = sendButton;
            }
    
            private async void sendButton_Click(object sender, EventArgs e)
            {
                try
                {
                    await _connection.InvokeAsync("Send", "WinFormsApp", messageTextBox.Text);
                }
                catch (Exception ex)
                {
                    Log(Color.Red, ex.ToString());
                }
            }
    
            private void UpdateState(bool connected)
            {
                disconnectButton.Enabled = connected;
                connectButton.Enabled = !connected;
                addressTextBox.Enabled = !connected;
    
                messageTextBox.Enabled = connected;
                sendButton.Enabled = connected;
            }
    
            private void OnSend(string name, string message)
            {
                Log(Color.Black, name + ": " + message);
            }
    
            private void Log(Color color, string message)
            {
                Action callback = () =>
                {
                    messagesList.Items.Add(new LogMessage(color, message));
                };
    
                Invoke(callback);
            }
    
            private class LogMessage
            {
                public Color MessageColor { get; }
    
                public string Content { get; }
    
                public LogMessage(Color messageColor, string content)
                {
                    MessageColor = messageColor;
                    Content = content;
                }
            }
    
            private void messagesList_DrawItem(object sender, DrawItemEventArgs e)
            {
                var message = (LogMessage)messagesList.Items[e.Index];
                e.Graphics.DrawString(
                    message.Content,
                    messagesList.Font,
                    new SolidBrush(message.MessageColor),
                    e.Bounds);
            }
        }
    复制代码

    5、启动上一篇的SignalR服务端

    输入地址 http://127.0.0.1:5000/myTestHub

  • 相关阅读:
    生产排程系统设计(二)设计思路
    一个ExtJs项目的Demo
    信息流与生产作业的同步与监控
    生产企业的IT人才储备困局
    生产排程系统设计(三)设计概要
    生产排程系统设计(一)设计愿景
    找工作时,你如何看待薪资问题
    sql 跨服务器 select ,update,insert
    Biztalk和Widows Wrokflow Fundation的区别和联系
    BizTalk 2010 虚拟环境分布式安装需要注意的问题
  • 原文地址:https://www.cnblogs.com/lhwpc/p/15149812.html
Copyright © 2011-2022 走看看