【发布时间】:2019-04-08 21:59:03
【问题描述】:
我有一个 Server 类,它在接收到新连接时在运行时创建一个 ClientHandler 对象。在 ClientHandler 内部,我需要在收到特定消息时触发 clientEvent。在我的 Form 类中,我引用了 Server 类,但我需要订阅 ClientHandler 对象中的 clientEvent。但是,该对象在设计时还不存在。如何订阅?
我在服务器中创建了一个订阅 clientEvent 的事件处理程序,它引发了另一个 serverEvent。在 Form 类中,我订阅了 serverEvent。这样我就间接地收听了clientEvent。但我相信有更好的方法来做到这一点。
public delegate void SomeEvent(string message);
public class Server
{
public ClientHandler clientHandler;
public event SomeEvent serverEvent;
// callback function when new connection received
public void on_connected()
{
clientHandler = new ClientHandler(...)
clientHandler.clientEvent += ClientEventHandler;
}
public void ClientEventHandler(string message)
{
serverEvent?.Invoke(message)
}
}
public class ClientHandler
{
public event SomeEvent clientEvent;
// callback when message is read
void ReadCallback(...)
{
...
// Some message received
clientEvent?.Invoke("Message received: " + someMessage);
}
public partial class From1 : Form
{
public Form1()
{
Server server = new Server(...);
server.serverEvent += serverEventHandler;
...
}
private void serverEventHandler(string message)
{
// do something with message
}
}
【问题讨论】:
标签: c# events tcplistener