我对回调函数中的“sendDone.Set()”很是迷惑,明明没有阻塞应用程序,为何要重新启动应用程序呀?我是一个新手,对回调、ManualResetEvent都了解的不是很清楚。希望哪位高手给我解决下,如果能具体的介绍下其中的内部机制,更是感激不尽。
因为刚注册,分数也不太多,怕不够给的,只能少给一点了(10分).private static void Send(Socket client, String data) {
    // Convert the string data to byte data using ASCII encoding.
    byte[] byteData = Encoding.ASCII.GetBytes(data);    // Begin sending the data to the remote device.
    client.BeginSend(byteData, 0, byteData.Length, SocketFlags.None,
        new AsyncCallback(SendCallback), client);
}
发送回调方法 SendCallback 实现 AsyncCallback 委托。它在网络设备准备接收时发送数据。下面的示例显示 SendCallback 方法的实现。它采用一个名为 sendDone 的全局 ManualResetEvent。
private static void SendCallback(IAsyncResult ar) {
    try {
        // Retrieve the socket from the state object.
        Socket client = (Socket) ar.AsyncState;        // Complete sending the data to the remote device.
        int bytesSent = client.EndSend(ar);
        Console.WriteLine("Sent {0} bytes to server.", bytesSent);        // Signal that all bytes have been sent.
        sendDone.Set();
    } catch (Exception e) {
        Console.WriteLine(e.ToString());
    }
}