我已经编写了一个聊天应用程序,除了一行代码之外,它正在按照需要运行,这导致了我的问题。
在我的主要形式中,我有:
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 });
}
}
现在真的让我感到难过:/。
答案 0 :(得分:1)
我认为您正在尝试在用户线程中设置文本。 Control.Enabled
可以在另一个线程中正常工作,但是你不能在那里设置像Text这样的任何值。所以在主线程中附加文本。您可以使用displayBox.Invoke
方法来实现此目的。