Domanda

Ho scritto un'applicazione di chat che funziona come desiderata a parte 1 linea di codice che mi sta causando problemi.

Nel mio mainform ho:

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

Questo sta visualizzando la mia chatbox, il problema è che questo può essere utilizzato solo una volta se provo ad aggiungere il testo nella mia thread chatbox:

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

Con la linea APPENDTEXT non ha commentato quel programma aprirà una casella di chat una volta e chiuderà fine, ma si bloccherà se cercherò di aprirne un altro.Senza questa linea di codice l'applicazione funziona bene.Credo che potrebbe essere un problema con il filo che non termina correttamente o qualcosa lungo quelle linee.

Qualsiasi aiuto su questo problema sarebbe molto apprezzato.Se l'ho spiegato male, chiedi e malato prova a fare un lavoro migliore.

Modifica:

Ho provato a usare un delegato ma sto ancora ottenendo lo stesso problema.

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

Questo mi ha davvero strampato ora: /.

È stato utile?

Soluzione

Penso che stiate cercando di impostare il testo nella tua discussione dell'utente.Control.Enabled funzionerà bene in un altro thread ma non è possibile impostare alcun valore come il testo laggiù.Quindi aggiunge il testo nel tuo thread principale.È possibile utilizzare il metodo displayBox.Invoke per ottenere questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top