1

コードの一部が意図したよりも速く処理されるという問題があります。私は client.BeginConnect を呼び出すと、他のコードが処理される前に接続される場合があります。

例:

client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client); 

// this code below is preformed later because ConnectCallback is called to quickly 

Debug.WriteLine(client.LocalEndPoint.ToString());

ここでの問題は、メソッド ConnectCallback がコード Debug.Writeline(....) よりも高速に実行される場合があることです。ConnectCallback 関数をブロックまたは有効にするだけでよいため、Debug.Writeline は ConnectCallback よりも高速に実行されます。

手伝ってくれてありがとう。

4

1 に答える 1

1

ここに素晴らしいMSDNの記事があります:非同期クライアントソケットの使用

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());
    }
}

したがって、Debug.WriteLine()呼び出しをConnectCallback()メソッドに移動するだけです。

于 2012-08-17T11:22:01.930 に答える