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

回答

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(); 
    } 
}