2015-06-15 111 views
0

我有代碼,試圖建立連接每3秒使用TCP和阻塞套接字。每當它嘗試與socket.connect()建立連接時,我的所有Windows應用程序都會暫時凍結,甚至無法輸入記事本。我已經在2臺電腦上測試過它,結果相同。代碼駐留在計時器事件中。socket.connect()凍結窗口

如何在不使用異步方法的情況下避免凍結?

代碼:

IPEndPoint remoteEP = new IPEndPoint(ip, mainPort); 

// Create a TCP/IP socket. 
commandReceiverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
commandReceiverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 0); 
commandReceiverSocket.Blocking = true; 
commandReceiverSocket.Connect(remoteEP); 
+0

如果您無法鍵入外部應用程序,其他事情正在進行。當您在應用程序中使用100%的CPU時,最有可能出現這種行爲。當您的計算機如此操作時,您的CPU使用率是多少? –

+0

不,CPU使用率低於5%。 – Yekoor

+0

現在我將代碼從表單加載事件的while循環中移出定時器事件,並且在啓動時它僅凍結一次,持續1-2秒。 – Yekoor

回答

0

試圖建立在任何語言中的UI線程內的連接可能會導致此。從應用程序的形式中在循環或定時器中調用它是不健康的。

嘗試在不同的線程中運行與連接有關的所有內容,並且不要使用UI線程。