【问题标题】:Gui not updating properly (from async)Gui 没有正确更新(来自异步)
【发布时间】:2012-05-05 03:47:59
【问题描述】:

我有一个问题让我整个星期都发疯了。我创建了一个非常简单的异步 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 线程正确访问文本框。

【问题讨论】:

    标签: c# user-interface asynchronous delegates


    【解决方案1】:

    试试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多