我有一个Server类,该类在运行时在收到新连接时创建ClientHandler对象。在ClientHandler内部,我需要在收到特定消息时触发一个clientEvent。在我的Form类中,有对Server类的引用,但是我需要在ClientHandler对象中订阅clientEvent。但是,在设计时该对象尚不存在。我该如何订阅?
我在Server中创建了一个订阅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
}
}
答案 0 :(得分:1)
这种方法没有什么问题,只要您确定在删除孩子时就退订该事件。
以下是解决此问题的三种主要方法