0

我编写了一个聊天应用程序,除了导致我出现问题的 1 行代码外,它可以正常工作。

在我的 MainForm 中,我有:

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

这真的让我现在很难过:/。

4

1 回答 1

1

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

于 2012-05-22T09:38:43.970 回答