Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C#] Problema gestione eventi... Invoke?

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

    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
            
    }
        } 
    Questo invece nel form principale... Sia conn un oggetto della classe definita in parte sopra...
    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
            

    Alla riga di codice chatTxt.AppendText("Client: " + mex + '\n'); mi viene lanciata questa 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.
    Programmazione .NET
    http://www.samueletosatto.tk

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    prova a vedere meglio.. l'invoke non può non esserci..

  3. #3
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    non puoi accedere direttamente a un controllo nella form da un altro thread...
    ecco qui un semplice esempio di come si può risolvere
    http://www.dotnetwatch.com/C-Cross-t...no-445_AR.aspx
    I got the remedy

  4. #4
    Ok funziona! grazie
    Programmazione .NET
    http://www.samueletosatto.tk

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.