Приложение чата C# AppendText вызывает проблемы
Я написал приложение для чата, которое работает по своему усмотрению, кроме 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;
}
}
Если строка приложения не закомментирована, программа откроет окно чата и закроется нормально, но остановится, если я попытаюсь открыть другое. Без этой строки кода приложение работает нормально. Я считаю, что это может быть проблема с тем, что поток не заканчивается правильно или что-то в этом роде.
Любая помощь по этому вопросу будет принята с благодарностью. Если я плохо объяснил, просто спросите, и я постараюсь сделать лучше.
РЕДАКТИРОВАТЬ:
Я пытался использовать делегата, но у меня все та же проблема.
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 ответ
Я думаю, что вы пытаетесь установить текст в пользовательской ветке. Control.Enabled
будет нормально работать в другом потоке, но вы не можете установить там любое значение, например Text. Так что добавьте текст в свою основную ветку. ты можешь использовать displayBox.Invoke
метод для достижения этого.