Приложение чата 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 метод для достижения этого.

Другие вопросы по тегам