C#聊天应用程序AppendText导致问题

时间:2012-05-22 09:27:10

标签: c# multithreading appendtext

我已经编写了一个聊天应用程序,除了一行代码之外,它正在按照需要运行,这导致了我的问题。

在我的主要形式中,我有:

        ChatBox cb = new ChatBox(person); 
        this.AddOwnedForm(cb);
        cb.Show();

这是显示我的聊天框,问题是这只能使用一次如果我尝试在聊天框线程中附加文字:

        if (Ex.Message.Contains("chat ended"))
           {
             entryBox.Enabled = false;
             send.Enabled = false;
            if (displayBox.Enabled == true)
               {
                displayBox.AppendText("The User has left chat" + Environment.NewLine); // <- PROBLEM LINE OF CODE
                displayBox.Enabled = false; 
               }
           }

取消注释appendtext行,程序将打开一个聊天框并关闭,但如果我尝试打开另一个,则会冻结。没有这行代码,应用程序工作正常。我相信这可能是一个问题,线程没有正确结束或沿着那些线。

对此问题的任何帮助将不胜感激。如果我解释得很糟糕,只要问一下,不要试着做得更好。

修改

我尝试使用代理,但我仍然遇到同样的问题。

private void setDisplayBox(RichTextBox db)
    {
        if (this.InvokeRequired == false)
        {
            db.SelectionColor = Color.Red;
            db.AppendText("The User has left chat" + Environment.NewLine);
        }
        else
        {
        SetDisplayBox setDb = new SetDisplayBox(setDisplayBox);
        this.Invoke(setDb, new object[] { db });
        }
    }

现在真的让我感到难过:/。

1 个答案:

答案 0 :(得分:1)

我认为您正在尝试在用户线程中设置文本。 Control.Enabled可以在另一个线程中正常工作,但是你不能在那里设置像Text这样的任何值。所以在主线程中附加文本。您可以使用displayBox.Invoke方法来实现此目的。