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
相关产品推荐
相关产品推荐

