我有一個已經實現了異步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以訪問Form1的SendCallback功能。
這裏是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函數調用發送的數據,然後從Form發送數據嗎?
我建議將回調作爲MyObject的一種方法,因爲它與該對象有關,並使其不在UI代碼中 – Jetti