socket.connect() 冻结窗口
本文关键字:冻结 窗口 connect socket | 更新日期: 2023-09-27 17:56:05
我有代码尝试使用 TCP 和阻塞套接字每 3 秒建立一次连接。每当它尝试与socket.connect()建立连接时,我所有的Windows应用程序都会冻结片刻,我什至无法在记事本中输入。我已经在 2 台 PC 上进行了测试,结果相同。代码驻留在计时器事件中。
如何在不使用异步方法的情况下避免冻结?
法典:
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);
尝试从任何语言的 UI 线程中建立连接都可能导致此问题。以应用程序的形式从循环或计时器中调用它根本不健康。
尝试在不同的线程中运行与连接相关的所有内容,并且不要使用 UI 线程。