1

私は一週間ずっと私を夢中にさせている問題を抱えています。作成した非常に単純な非同期TCPクライアント/サーバーがあります。TCPメッセージを受信したら、それをテキストボックス(基本的には単純なチャットプログラム)の前に追加したいと思います。非同期メソッドがバックグラウンドスレッドで実行されていることを認識しているInvokeRequiredので、GUIが正しいスレッドによって更新されていることを確認するために使用します(以下のコードを参照)。

メッセージが受信され、テキストボックスに追加されます。奇妙なことに、新しいメッセージを受信するたびに、テキストボックスは新しいメッセージを追加しますが、それ以外はすべて削除します。これは非同期呼び出しでのみ発生します(他の呼び出しはテキストボックスを消去しません)。これには何か理由がありますか?

ありがとう

private void UpdateText(string message)
{
    if (this.InvokeRequired)
    {
        UpdateDelegate update = new UpdateDelegate(UpdateText);
        this.Invoke(update, new object[] { message });
    }
    else
    {
        textHistory.Text = message + System.Environment.NewLine + textHistory.Text;
        textHistory.Refresh();
    }
}

Writeステートメントは、テキストボックスがGUIスレッドによって適切にアクセスされていることを確認するために配置されました。

4

1 に答える 1

0

試す

private void UpdateText(string message)
{
    if (this.InvokeRequired)
    {
        UpdateDelegate update = new UpdateDelegate(UpdateText);
        this.Invoke(update, new object[] { message });
    }
    else
    {
        var V = message + System.Environment.NewLine + textHistory.Text;
        textHistory.Text = V;
        textHistory.Refresh();
    }
}
于 2012-05-05T03:52:17.283 に答える