public static void Connect(EndPoint remoteEP, Socket client) {
client.BeginConnect(remoteEP,
new AsyncCallback(ConnectCallback), client);
connectDone.WaitOne();
}
private static void ConnectCallback(IAsyncResult ar) {
try {
// Retrieve the socket from the state object.
Socket client = (Socket) ar.AsyncState;
// Complete the connection.
client.EndConnect(ar);
Console.WriteLine("Socket connected to {0}",
client.RemoteEndPoint.ToString());
// Signal that the connection has been made.
connectDone.Set();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
こんにちは、私は上の2つの関数の質問があります 関数 "client.BeginConnect"では、なぜConnectCallbackのパラメータが空ですか? ConnectCallback関数にはパラメータ(IAsyncResult ar)があります。 BeginConnectはこのパラメータを呼び出すことはありません。誰が私の質問に答えることができますか?なぜこのパラメータは空ですか?
「AsyncCallback」がメソッドの代理人を受け入れると仮定します。完了したら呼び出します。メソッド 'ConnectCallback'を呼び出し、それが生成した' IAsyncResult'を渡します。 – Equalsk
これはすべて "Under the hood"で終了し、非同期アクションを完了した後、 'ConnectCallback'メソッドを呼び出し、生成された' IAsyncResult'を渡します。これには、この特定の非同期操作に関する情報が含まれています。また、 'AsyncState'として指定された、あなたのケースの' client'パラメータも含まれています。 –