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線程被正確地訪問。