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

基于NetCoreServer类库实现WinForm获取TCP接收字符串的问题

解决方案:通过事件机制传递类库中的TCP接收消息

核心思路是用事件+委托实现类库与UI层的松耦合通信,既不修改NetCoreServer的OnReceived方法签名,又能让窗体类获取到接收的消息,同时兼顾后续控制台客户端的复用需求。

步骤1:在类库的TCP客户端类中定义消息接收事件

在你继承自NetCoreServer.TcpClient的类里,声明一个用于传递接收消息的事件,然后在OnReceived方法中解析出字符串后触发该事件:

using NetCoreServer;
using System.Text;

public class CustomTcpClient : TcpClient
{
    // 定义接收消息事件,参数为解析后的字符串
    public event Action<string> OnMessageReceived;

    protected override void OnReceived(byte[] buffer, long offset, long size)
    {
        // 按实际编码解析字节数组为字符串(示例用UTF-8)
        string receivedMsg = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
        
        // 触发事件,传递消息(空判断避免空引用)
        OnMessageReceived?.Invoke(receivedMsg);

        // 保留NetCoreServer原有逻辑(比如调用基类方法、处理心跳等)
        base.OnReceived(buffer, offset, size);
    }

    // 其他必要的重写方法(如OnConnected、OnDisconnected等)...
}

步骤2:在窗体类中订阅事件并更新UI

在WinForm窗体中,实例化类库的TCP客户端对象,订阅其消息接收事件,注意WinForm必须跨线程更新UI,所以要使用Invoke切换到UI线程:

using System.Windows.Forms;

public partial class ChatForm : Form
{
    private CustomTcpClient _tcpClient;

    public ChatForm()
    {
        InitializeComponent();
        // 初始化TCP客户端
        _tcpClient = new CustomTcpClient();
        // 订阅消息接收事件
        _tcpClient.OnMessageReceived += HandleReceivedMessage;
    }

    private void HandleReceivedMessage(string message)
    {
        // 判断是否需要跨线程更新UI
        if (txtChatBox.InvokeRequired)
        {
            txtChatBox.Invoke(new Action<string>(HandleReceivedMessage), message);
            return;
        }
        // 直接更新UI控件
        txtChatBox.AppendText($"收到消息:{message}{Environment.NewLine}");
    }

    // 其他窗体逻辑(如连接服务器按钮、发送消息按钮等)...
}

扩展说明

  • 如果需要传递更多信息(比如消息发送方IP、时间戳),可以自定义继承自EventArgs的类,将事件改为EventHandler<CustomMessageEventArgs>类型。
  • 控制台客户端复用类库时,只需订阅同一个事件,在事件处理方法中直接用Console.WriteLine输出消息即可,无需修改类库代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:10:32