非同期 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");
}
}
1 つの解決策は、SendCallback を静的にすることですが、これにより、オブジェクトのインスタンスに設定されていない例外が発生します。
これを行う別の方法はありますか?私は間違った木を吠えていますか?MyObjects の関数呼び出しから送信したいデータを返してから、フォームから送信する必要がありますか?