Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: C# due thread

  1. #1

    C# due thread

    Ciao,
    sono alle prime armi con C# e Visual Studio e devo modificare una applicazione.
    In pratica il problema è il seguente:

    Ho una applicazione che permette l'esecuzione di alcune operazioni, ad un certo punto, questa applicazione crea un thread e questo thread deve eseguire un determinato metodo, ma quando vado a lanciarlo mi da come errore il fatto che dovrei usare un Control.Invoke, ma come si usa?? Ho guardato un sacco di cose, ma nessuno specifica nel dettaglio come usarli!

    In pratica, la mia apllicazione può essere vista come un qualcosa che gira e un altro thread va ad aggiornare alcune cose come ad esempio una casella di testo...

    Ad esempio una sveglia...c'è un applicazione normale che gira, quindi l'orologio ed un thread che funge da sveglia, ossi cammina per i suoi fatti e ogni tanto controlla l'ora, nel caso in cui l'ora coincide scrive un messaggio.

    Nota implementativa,
    Io ho creato il thread all'interno di una classe di gestione, è come se ho creato il thread sveglia all'interno del thread orologio...quindi ho, una classe gui ( riporta l'interfaccia grafica ), una classe orologio ( con tutti i metodi necessari e utili anche per cambiare la grafica ) e all'interno della classe orologio ho un metodo runThread che appunto deve poter modificare la grafica ed accedere a qualche metodo.

    All'interno di orologio chiamo il thread cosi:

    Thread trd = new Thread(new ThreadStart(this.runThread));
    trd.IsBackground = true;
    trd.Start();

    L'errore che visual studio mi da è evidenziato su un componente grafico ( in pratica su uno di quelli su cui il thread sveglia va a scrivere ) e da il seguente messaggio:

    Utilizzare Control.Invoke per interagire con i controlli creati in un thread separato.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non mi dirai che hai fatto una ricerca senza trovare nulla ...

    http://blogs.msdn.com/ericgu/archive.../23/52502.aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Scusa, ma sarò stanco io...ma non ci ho capito granchè...io ho un thread che esegue autonomamente delle operazioni...a chi dovrei affibiare l'operazione che dovrebbe fare il botton?

    Sarà che sono stanco morto...ma ho bisogno di aiuto!

  4. #4
    http://msdn.microsoft.com/it-it/libr...28(VS.80).aspx
    In sostanza, non puoi inovcare metodi di un controllo Windows Forms che appartiene ad un altro thread. Usa il metodo Invoke del controllo per richiamare la procedura che deve effettuare modifiche a quel controllo dal thread a cui esso appartiene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Potresti farmi un esempio con del codice?
    Ma un esempio ben dettagliato!

    Magari ti spiego bene la mia situazione cosi puoi arrangiami qualcosa!

    Io ho la classe che gestisce l'interfaccia grafica.
    L'unica cosa di cui si occupa questa classe è appunto quello di aggiornare i componenti grafici.

    Esiste poi una classe Gestione, la quale si occupa della gestione dell'applicazione, in pratica questa classe chiama i metodi di tutte le altre classe, istanzia gli oggetti...è un tutto fare!
    Vi è poi la classe thread che deve chiedere al gestore di aggiornare la grafica.Il thread è creato dal gestore ed in pratica il thread deve chiamare un determinato metodo di gestore, il quale chiama al suo interno due metodi della classe grafica.

    Ecco questo è lo scenario!
    Come faccio dal thread ad invocare il metodo di gestore ( il quale nn riceve alcun parametro ) e a sua volta invocare quelli della grafica??

    Spero possiate aiutarmi!

  6. #6
    In che thread viene creata l'istanza della classe Gestione?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    è la grafica che istanzia il gestore passando come parametro se stessa!

  8. #8
    Dunque è meglio lavorare con l'istanza della classe Gestione dal thread della grafica; a questo punto ti basterà invocare tutti i metodi della classe Gestione che richiami dall'altro thread tramite istanzaform.Invoke.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    ti dispiacerebbe farmi un esempio con del codice!!

    Non ho mai usato queste cose...e non trovo una guida fatta bene, che si capisca in toto.

    Io ho programmato solo in java e li avevi libero accesso a tutto!

  10. #10
    C'è un esempio chiarissimo nella pagina che ti ho linkato, su un po' di intraprendenza!
    Amaro C++, il gusto pieno dell'undefined behavior.

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.