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

.NET Standard 3.1 TCP客户端:如何通过订阅事件传递消息参数

解决方案

要在事件中传递收到的消息,你需要自定义一个继承自EventArgs的类来承载消息数据,然后使用泛型版本的EventHandler<T>定义事件。具体步骤如下:

1. 创建自定义 EventArgs 类

这个类用来封装需要传递的消息:

public class MessageReceivedEventArgs : EventArgs
{
    // 存储收到的消息
    public string ReceivedMessage { get; }

    public MessageReceivedEventArgs(string receivedMessage)
    {
        ReceivedMessage = receivedMessage;
    }
}

2. 修改 myTcpClass 中的事件定义与触发逻辑

把原有的EventHandler替换为泛型的EventHandler<MessageReceivedEventArgs>,并在触发事件时传入消息:

/*####################### myTcpClass #######################*/
// 使用泛型事件处理器,关联自定义的EventArgs
public event EventHandler<MessageReceivedEventArgs> OnMessageReceived;

// 触发事件的方法需要接收消息参数
private void CallOnMessageReceived(string receivedMessage)
{
    var handler = this.OnMessageReceived;
    // 传递当前实例作为sender,并传入封装好消息的EventArgs
    handler?.Invoke(this, new MessageReceivedEventArgs(receivedMessage));
}

3. 在主程序中订阅事件并获取消息

订阅时通过自定义EventArgs的属性拿到消息:

/*###################### MAIN PROGRAM ######################*/
myTcpClass myTcp = new myTcpClass(ip:"123.123.123.123", port:22171);
// 订阅事件,从e中提取消息
myTcp.OnMessageReceived += (sender, e) =>
{
    string receivedMessage = e.ReceivedMessage;
    // 在这里处理消息...
};

补充说明

  • 默认的EventHandler只能传递sender和空的EventArgs,无法携带额外数据,所以必须通过自定义EventArgs类扩展数据传递能力。
  • 触发事件时传递this作为sender,能让订阅者明确知道是哪个对象触发的事件,比传递null更符合.NET事件的设计规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:22:37