Vi spiego brevemente il mio problema.
Ho una classe, che attraverso un Thread, controlla qualcosa, poi, ad un certo punto, scatena un evento definito nella classe stessa.
Il form principale ha dunque un oggetto di questa classe, e ha una routine che viene chiamata quando si scatena l'evento di quell'oggetto. Ora, questa routine, deve modificare un controllo del form, e l'operazione gli viene negata, poichè la routine fa parte di un Thread differente.... come risolvo il problema?
Ecco le parti rilevanti del mio codice
Questo nella classe che genera l'evento...
Questo invece nel form principale... Sia conn un oggetto della classe definita in parte sopra...Codice PHP:public event EventMessageHandler ReciveData; //Questa è la dichiarazione dell'evento
private void myThread()
{
sr = new StreamReader(tcpSv.GetStream());
sw = new StreamWriter(tcpSv.GetStream());
sw.WriteLine(name);
sw.Flush();
while ((mex = sr.ReadLine()) != "")
{
ReciveData(mex); //qua scateno l'evento
}
}
Alla riga di codice chatTxt.AppendText("Client: " + mex + '\n'); mi viene lanciata questa eccezione:Codice PHP:private void server_Connecting(Connection conn)
{
this.conn = conn;
conn.ReciveData+=new EventMessageHandler(conn_ReciveData); //collego l'evento alla routine
this.chatTxt.Text+="Client Connected\n";
}
private void conn_ReciveData(String mex)
{
chatTxt.AppendText("Client: " + mex + '\n'); //qua lancia l'eccezione
}
Operazione cross-thread non valida: è stato eseguito l'accesso al controllo 'chatTxt' da un thread diverso da quello da cui è stata eseguita la creazione.
Come risolvo questo inconveniente? devo usare Invoke? però nella classe da me definita non so perchè, non ho disponibile questo metodo.

Rispondi quotando
