1
私は一週間中狂っているような問題があります。私は本当にシンプルな非同期TCPクライアント/サーバーを作成しました。私はTCPメッセージを受け取ると、それをテキストボックス(基本的には単純なチャットプログラム)に追加します。私は、非同期メソッドがバックグラウンドスレッド上で実行されることを認識しているので、InvokeRequired
を使用してGUIが正しいスレッドによって更新されていることを確認します(下記のコードを参照)。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();
}
}
書き込み文がテキストボックスが正しくGUIスレッドによってアクセスされていたことを確認するために配置しました。