0

クライアント アプリケーションとサーバー アプリケーションの間で簡単な通信を行っています。

サーバ:

TcpListener tcp = new TcpListener(IPAddress.Parse("192.168.1.66"),9000);
tcp.Start();
TextBox.Text += "Start Listening \r\n"; //1
Socket s = tcp.AcceptSocket();
TextBox.Text += "Client Has Connected \r\n";

遅延は次のように発生します。文字列番号 1 は、クライアントが接続されるまで表示されず、アプリケーションは単にフリーズし、ウィンドウをドラッグすることさえできません。

遅延を追加してみました:

TextBox.Text += "Start Listening \r\n";
System.Threading.Thread.Sleep(1000);
Socket s = tcp.AcceptSocket();
TextBox.Text += "Client Has Connected \r\n";

それでも、これでは最初のメッセージを出力してからソケットを検索することはできません。クライアントが接続されるまで、アプリケーションはフリーズし続けます。

4

1 に答える 1

0

スレッドでこれを聞いていますか?そうでない場合は、GUI の更新をロックしています。

void StartListener()
{
    System.Threading.Thread listenerThread = new System.Threading.Thread(ListenerThread));
    listenerThread.IsBackground = true; // Causes the thread to close if the app is closed
    listenerThread.Start();
}

void ListenerThread()
{
    TcpListener tcp = new TcpListener(IPAddress.Parse("192.168.1.66"),9000);
    tcp.Start();
    UpdateStatus("Start Listening \r\n"); //1
    Socket s = tcp.AcceptSocket();
    UpdateStatus("Client Has Connected \r\n"); //1

    // Listen for more messages, or close the listener here.
}

void UpdateStatus(string message)
{
    if(InvokeRequired)
        Invoke((MethodInvoker)delegate { UpdateStatus(message); });
    else
        Textbox.Text = message;
}
于 2013-05-08T17:57:57.923 に答える