Ora è chiaro perchè questo succede.
Grazie di avermi seguito.
Ho però un'ultima richiesta.
Ho passato del tempo davanti questo giretti che hai chiamato "sotto il cofano"
l'ho ridotto e adattato alla mia applicazione.
Ti dico già che funziona ma vorrei che mi spiegassi meglio perchè
Ora posto il codice e vorrei ti soffermassi sui commenti e mi dicessi se sei d'accordo su quello che ho scritto o se c'è qualcosa da rivedere.
codice:
private Thread ThreadDiAppoggio;
        delegate void SetTextCallback();
        private void Protocollo_MessaggioTHARGAricevuto(object sender, MessaggioTHARGAricevutoEventArgs e)
        {
            ThreadDiAppoggio = new Thread(new ThreadStart(MetodoRichiamoThreadTHARGA));//   Arrivo qui e so che l'evento è stato generato da un tread non gui
            ThreadDiAppoggio.Start();                                                  //   Quindi ne istanzio uno nuovo e gli "dico di avviarsi" partendo da MetodoRichiamoThreadTHARGA
        }                                           //                                                          |
        private void MetodoRichiamoThreadTHARGA()   //Qui parte                                          <------|
        {                                           //e vado a richiamare il metodo "sotto il cofano"
            MetodoDaTreadGiustoTHARGA();            //
        }                                           //
        private void MetodoDaTreadGiustoTHARGA()    //
        {                                           //
            if (button1.InvokeRequired)             //al primo if chiedo se è possibile modificare la gui       |--->Ora richiedo all'if lo stato del bottone e questa volta
            {                                       //in questo caso interrogando un tasto presente in gui      |   mi dice che è modificabile probabilmente perchè è quì che
                SetTextCallback delegato;           //NON si può! Allora "Faccio puntare al delegato            |   ritorno al tread giusto.
                delegato = MetodoDaTreadGiustoTHARGA;//questo stesso metodo                                     |           |
                Invoke(delegato);                   //e lo invoko------------------------------------------------           |
            }                                       //                                                                      |
            else                                    //                                                                      |
            {                                       //                                                                      |
                QuelloCheVolevoFareQuandoArrivavaIlMessaggioTHARGA();//                                                     |
            }                                                        //                                                     |
        }                                                            //                                                     |
        private void QuelloCheVolevoFareQuandoArrivavaIlMessaggioTHARGA()<--------------------------------------------------|
        {// Il nome di questo metodo non presta a commenti!!
            textBoxTHARGA.Text = null;
            for (int counter = 0; (counter < Protocollo.MessaggioRicevuto.Length); counter++)
                textBoxTHARGA.AppendText(Protocollo.MessaggioRicevuto[counter].ToString());
        }