0

C# で TCP/IP メッセージングを介してテキストを受信するための WPF アプリケーション クライアントを作成しました。しかし、サーバーからデータを受信するには、button2 をクリックする必要があります。ボタン2をクリックせずにテキストを直接受信するチャットアプリケーションのようにするにはどうすればよいですか? 私のコードは以下のようなものです:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        textBox1.Text="Client Started";
        clientSocket.Connect("10.228.183.81", 5000);
        textBox2.Text = "Client Socket Program - Server Connected ...";

    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
         NetworkStream serverStream = clientSocket.GetStream();
            byte[] inStream = new byte[10025];
            serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
            string returndata = System.Text.Encoding.ASCII.GetString(inStream);
            textBox2.Text = returndata;
    }

}

}

4

2 に答える 2

3

アプリケーションをスレッド化する必要があります。したがって、受け取るものはすべてスレッドで処理する必要があります。

ここでかなり良いサンプルを見ることができます。

于 2013-06-06T13:15:36.987 に答える
1

提供された間隔に基づいてチェックするように、タイマーオブジェクトを実装できます。次に、Task Factory を使用して UI スレッドをロックしないようにし、デリゲートを介して受信したデータで TextBox を更新することができます (私の例は単純であり、おそらく実装したい方法ではありません。例としてアイデアを提供するだけです)。 .

Timer myTimer = new Timer();

//On application startup start your timer like so
myTimer.Tick += new EventHandler(TimerEventProcessor);
// checks every 5 seconds, Interval accepts double in milliseconds
myTimer.Interval = 5000;
myTimer.Start();

// Then create a event handler for your timer Tick event
private void TimerEventProcessor(Object myObject, EventArgs myEventArgs) {
    // stop your timer and restart it possibly once you received data and have updated gui
    // using task will keep it from Locking UI thread
    Task.Factory.StartNew(() => 
    { 
        //perform check to socket and update UI using some type of delegate like below
        this.Invoke((MethodInvoker)delegate {
              TextBox.Append(Recieved Text From Socket); // runs on UI thread
         });
    }
} 
于 2013-06-06T13:33:17.233 に答える