0

問題を引き起こしている1行のコードを除いて、希望どおりに機能するチャットアプリケーションを作成しました。

私のメインフォームには次のものがあります。

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

これは私のチャットボックスを表示しています。問題は、チャットボックススレッドにテキストを追加しようとすると、これは1回しか使用できないことです。

        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 に答える