You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中点击按钮TCP连接成功后启用服务器消息监听的方法

解决WinForms中TCP/IP连接成功后无法监听服务器消息的问题

你当前的核心问题是事件绑定时机错误:窗体构造函数执行时,State_of_connection初始值为false,导致TCP_IP_server_device.MessageReceived事件从未被绑定;点击按钮连接成功后,仅更新了State_of_connection变量,却未执行事件绑定操作。

解决方案

需要在连接成功后立即绑定消息接收事件,同时为避免重复点击按钮导致事件多次注册,可先移除原有绑定再重新绑定。

修改后的完整代码

namespace Form1
{
    public partial class Main_Form: Form
    {
        private CogJob Job;
        private CogJobManager Job_manager;
        private CogJobIndependent Job_independent;

        string Received_string;
        bool State_of_connection = false;
        ICogIOTCPIP TCP_IP_server_device;
        
        public Main_HMI()
        {
            InitializeComponent();

            //Load application
            Job_manager = (CogJobManager)(CogSerializer.LoadObjectFromFile(@"Project"));

            // Initialize job variables
            Job = Job_manager.Job("Application");
            Job_independent = Job.OwnedIndependent;

            // Flush all job queues
            Job.ImageQueueFlush();
            Job_manager.UserQueueFlush();
            Job_manager.FailureQueueFlush();
            Job_independent.RealTimeQueueFlush();
        }
        
        // Decode the message received from the TCP/IP server device
        private void TCP_IP_server_device_MessageReceived(object sender, CogIOStreamMessageEventArgs eventArgs)
        {
            Received_string = eventArgs.DecodedMessage.Substring(2, 9);
        }

        // Safely shutdown application job manager when the form is closed;
        private void Main_HMI_FormClosing(object sender, FormClosingEventArgs e)
        {
            Job_manager.Shutdown();
        }

        private void Connect_to_TCP_IP_server_button_Click(object sender, EventArgs e)
        {
            Job_manager.IOEnable = true;
            TCP_IP_server_device = Job_manager.StreamInput("PLC", 2000, true);

            if (TCP_IP_server_device == null)
            {
                MessageBox.Show("Connection failed", "TCP/IP server device connection status");
            }
            else
            {
                MessageBox.Show("Connection successful", "TCP/IP server device connection status");
                State_of_connection = true;

                // 关键修改:连接成功后绑定消息接收事件
                // 先移除原有绑定(防止重复点击导致事件多次注册)
                TCP_IP_server_device.MessageReceived -= TCP_IP_server_device_MessageReceived;
                // 绑定事件
                TCP_IP_server_device.MessageReceived += TCP_IP_server_device_MessageReceived;
            }
        }
    }
}

补充说明

  • 先移除再绑定事件,是为了避免多次点击按钮导致同一条消息触发多次处理逻辑;
  • 确保TCP_IP_server_device在连接成功后不为null,此时绑定事件才会生效。

内容的提问来源于stack exchange,提问作者JCB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:20:34