我试过了

    Connectionclient.ReceiveTimeout = 10000;
    Connectionclient.Connect("127.0.0.1", 10072);


如果TcpListener正在运行,则可以正常工作。
但是如果TcpListener没有运行,我的tcpclient将在捕获异常之前像1秒钟一样冻结自身。
同时,我的连接消息也被冻结。

我只是想像所有在线游戏一样制作一个登录屏幕。

因此,我该如何解决该问题,或者我应该阅读些什么以找到自己的解决方案。

最佳答案

TcpClient.Connect方法是同步的,因此将阻塞调用线程,直到成功完成连接操作或出现错误为止。

如果调用线程恰好是拥有窗口句柄的线程,则窗口将显示为无响应。

为了解决您的问题,您可以使用与异步连接方法相对应的异步方法,该方法将在单独的工作线程上执行连接操作。

labelConnectionState.Text = "Connecting";
Connectionclient.BeginConnect("..", 43594, ConnectCallback,  Connectionclient);
...
private static void ConnectCallback(IAsyncResult asyncResult)
{
    try
    {
        TcpClient Connectionclient = (TcpClient) asyncResult.AsyncState;
        Connectionclient.EndConnect(asyncResult);
        labelConnectionState.Text = "Connected";
    }
    catch (SocketException socketException)
    {
        labelConnectionState.Text = "Server unavailable";
    }
}

08-26 18:57