我有一个连接到我的服务器的客户端,现在使用以下代码建立连接。但是,如果无法建立连接,则会创建一个事件,这样我的主程序就可以在失败时显示一条消息。但不会触发此事件。我怎样才能更正我的代码来实现这一点?
我的客户端套接字的包装器类
public class ClientWrapper
{
Socket clientSocket;
public delegate void ErrorMessageHandler(string errorMsg);
public event ErrorMessageHandler OnErrorRecieved;
public ClientWrapper(IPAddress serverIP, int port)
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(new IPEndPoint(serverIP, port));
}
catch (Exception e)
{
if (OnErrorRecieved != null)
OnErrorRecieved(e.Message);
}
}
}
在我的程序代码中,使用事件的地方
//Connect to Server
ClientWrapper clientSocket = new ClientWrapper(serverIP, port);
//Event trigger if client fails to connect to server
clientSocket.OnErrorRecieved += new ClientWrapper.ErrorMessageHandler(clientSocket_OnErrorRecieved);
事件的方法
void clientSocket_OnErrorRecieved(string errorMsg)
{
MessageBox.Show("No response from server. This can be caused if Server is offline or incorrect detail is provided.", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
最佳答案
那是因为在您将事件绑定(bind)到它之前,您的构造函数已经连接。 您应该使用构造函数以外的方法进行连接:
public void Connect(IPAddress serverIP, int port)
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(new IPEndPoint(serverIP, port));
}
catch (Exception e)
{
if (OnErrorRecieved != null)
OnErrorRecieved(e.Message);
}
}
并以这种方式构造它。
ClientWrapper clientSocket = new ClientWrapper();
clientSocket.OnErrorRecieved += new clientWrapper.ErrorMessageHandler(clientSocket_OnErrorRecieved);
clientSocket.Connect(serverIP, port);
只有在您连接之前绑定(bind)时才会触发该事件。
关于c# - 使用事件处理程序尝试 Catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567535/