Il multithreading consente di non "bloccare" il programma durante la sua esecuzione da cicli infiniti o da cose che richiedono molto tempo.
Stavo tentando anche di capire e realizzare un progetto che sfruttasse più thread per eseguire un solo lavoro ma qualcosa è andato storto.
In questa guida, Spiegherò come affiancare al thread principale altri thread secondari che gestiscano cicli o altro.
Per realizzare un nuovo thread, prima cosa occorre creare una sub che conterrà le istruzioni che vogliamo che vengano svolte su un thread differente.
Questa sub di esempio, in cui utilizzo una label ed un Do in una form, durante la sua esecuzione bloccherà il programma. Questo perchè il programma porta a termine una richiesta alla volta, in questo caso di aumentare una variabile di 1, sostituire il testo della label ed aggiornarsi. poichè lavora solamente come "una persona" ovvero con un solo thread.
Ora faremo in modo di dare una mano al programma, fornendogli un'aiutante ovvero un thread secondario che esegua una parte del lavoro chiesto al programma.
Inseriamo al di fuori della sub questo.
Questo inizializza una nuovo thread.
Ora, dobbiamo assegnare qualcosa da fare a questo Thread.
Perciò, inseriamo questo :
dobbiamo inserire questo però quando vogliamo che il thread inizi ad operare ad esempio alla pressione di un button, all'accensione di un timer o quant'altro.
Quì, Stiamo dicendo al nostro thread secondario che è stato delegato nell'eseguire esempio() ovvero la nostra sub. New Threading.Thread(AddressOf Me.esempio)
Infine con ThreadSecondario.Start() diciamo al thread di cominciare ad eseguire ciò che gli è stato assegnato. in questo caso la nostra cara sub di esempio.
Con ThreadSecondario.Abort() invece terminiamo il thread.
Ora, se lasciassimo il lavoro così, verrebbe generata un'eccezione (Operazione cross-thread non valida) in quanto ogni thread deve lavorare unicamente su ciò che crea. Ad esempio nel caso della label che è stata creata dal thread principale,
il thread secondario non può metterci mano.
Per Evitare questo, Possiamo "Evitare" il controllo sulla chiamata di thread differenti attraverso questo :
(Risparmiandoci milioni di deleghe rompiminchia )
Che effettivamente essendo un booleano, ed essendo impostato ora su Falso, non controllerà più, permettendo chiamate illegali fra i vari thread. (Tranquilli, non andate in galera )
Quest'ultimo source deve essere "Eseguito" prima dell'attivazione degli altri thread altrimenti genererà la odiata eccezione.
Consiglio, di inserirlo nel load della form.
Con questa guida e specificatamente utilizzando più thread, potrete utilizzare il System.threading.thread.sleep che vi eviterà l'utilizzo di vagonate di timer oltre all'evitare che
Si blocchi l'applicazione durante un download o durante una ricerca, aumentando incredibilmente la stabilità e la fluidità del programma.
Se non l'avete capito, per chi lo conosce, Buttate Application.doEvents() nel cesso
Spero vi torni utile la guida, il multithreading a me ha cambiato il metodo di programmazione, rendendo molto più veloci i miei lavori.
Crediti By Luca360 Se non Li lasciate vi spezzo le gambe
Stavo tentando anche di capire e realizzare un progetto che sfruttasse più thread per eseguire un solo lavoro ma qualcosa è andato storto.
In questa guida, Spiegherò come affiancare al thread principale altri thread secondari che gestiscano cicli o altro.
Per realizzare un nuovo thread, prima cosa occorre creare una sub che conterrà le istruzioni che vogliamo che vengano svolte su un thread differente.
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Questa sub di esempio, in cui utilizzo una label ed un Do in una form, durante la sua esecuzione bloccherà il programma. Questo perchè il programma porta a termine una richiesta alla volta, in questo caso di aumentare una variabile di 1, sostituire il testo della label ed aggiornarsi. poichè lavora solamente come "una persona" ovvero con un solo thread.
Ora faremo in modo di dare una mano al programma, fornendogli un'aiutante ovvero un thread secondario che esegua una parte del lavoro chiesto al programma.
Inseriamo al di fuori della sub questo.
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Questo inizializza una nuovo thread.
Ora, dobbiamo assegnare qualcosa da fare a questo Thread.
Perciò, inseriamo questo :
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
dobbiamo inserire questo però quando vogliamo che il thread inizi ad operare ad esempio alla pressione di un button, all'accensione di un timer o quant'altro.
Quì, Stiamo dicendo al nostro thread secondario che è stato delegato nell'eseguire esempio() ovvero la nostra sub. New Threading.Thread(AddressOf Me.esempio)
Infine con ThreadSecondario.Start() diciamo al thread di cominciare ad eseguire ciò che gli è stato assegnato. in questo caso la nostra cara sub di esempio.
Con ThreadSecondario.Abort() invece terminiamo il thread.
Ora, se lasciassimo il lavoro così, verrebbe generata un'eccezione (Operazione cross-thread non valida) in quanto ogni thread deve lavorare unicamente su ciò che crea. Ad esempio nel caso della label che è stata creata dal thread principale,
il thread secondario non può metterci mano.
Per Evitare questo, Possiamo "Evitare" il controllo sulla chiamata di thread differenti attraverso questo :
(Risparmiandoci milioni di deleghe rompiminchia )
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Che effettivamente essendo un booleano, ed essendo impostato ora su Falso, non controllerà più, permettendo chiamate illegali fra i vari thread. (Tranquilli, non andate in galera )
Quest'ultimo source deve essere "Eseguito" prima dell'attivazione degli altri thread altrimenti genererà la odiata eccezione.
Consiglio, di inserirlo nel load della form.
Con questa guida e specificatamente utilizzando più thread, potrete utilizzare il System.threading.thread.sleep che vi eviterà l'utilizzo di vagonate di timer oltre all'evitare che
Si blocchi l'applicazione durante un download o durante una ricerca, aumentando incredibilmente la stabilità e la fluidità del programma.
Se non l'avete capito, per chi lo conosce, Buttate Application.doEvents() nel cesso
Spero vi torni utile la guida, il multithreading a me ha cambiato il metodo di programmazione, rendendo molto più veloci i miei lavori.
Crediti By Luca360 Se non Li lasciate vi spezzo le gambe
Ultima modifica: