我有一个实现异步 TCP/IP 套接字的表单 (Form1)。我有一个我创建的对象(公共类 MyObject)。
从表单中,我创建了一个 MyObjects 数组。然后我调用 MyObjects 上的方法来操作数据。在 MyObjects 我有一个功能:
private void send(string sPacketData)
{
if (SocketState.clientSocket != null && SocketState.clientSocket.Connected)
{
byte[] byteData = Encoding.ASCII.GetBytes(sPacket);
SocketState.clientSocket.BeginSend(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(Form1.SendCallback), this);
}
}
这里的问题是我试图访问 Form1 的 SendCallback 函数而不引用 Form1。
这是 SendCallback 的样子:
public void SendCallback(IAsyncResult ar)
{
try
{
// Retrieve the socket from the state object.
MyObject mo = (MyObject)ar.AsyncState;
// Complete sending the data to the remote device.
int bytesSent = mo.SocketState.clientSocket.EndSend(ar);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("Send Callback: " + e.Message + "\r\n");
}
}
一种解决方案是将 SendCallback 设为静态,但这会导致未将其设置为对象实例的异常。
有不同的方法可以做到这一点吗?我在吠叫错误的树吗?我应该返回我想从 MyObjects 的函数调用发送的数据,然后从表单发送吗?