2012-08-17 53 views
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快。

感謝您的幫助。

+0

有趣的問題是你爲什麼要這樣做? – Qnan 2012-08-17 11:20:08

+0

你想達到什麼目的?異步代碼無法按照您希望的方式工作。 – ChrisF 2012-08-17 11:22:10

+0

我希望這是因爲程序的某些部分不應該在另一個之前處理。在我的例子中,ConnectCallback不應該在Debugg.Write行之前處理,所以ConnectCallback必須等待或者什麼。 – Bertoncelj1 2012-08-17 11:32:45

回答

1

這裏是一個偉大的MSDN文章:Using an Asynchronous Client Socket

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()方法。