Gui 未正确更新(从异步)
本文关键字:异步 更新 Gui | 更新日期: 2023-09-27 18:33:11
我有一个问题,整个星期都让我发疯。我创建了一个非常简单的异步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 线程正确访问文本框。
试试
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();
}
}