我有一个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
}
}
只要您确定在删除孩子时取消订阅该事件,这种方法就没有问题。
这是解决此问题的3种主要方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句