• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Come gestire il multithreading (basilare)Evitando il blocco del programma durante i cicli!

luca360

Nuovo utente
Autore del topic
10 Giugno 2010
36
0
Miglior risposta
0
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.

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 :emoji_relieved: )
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 :emoji_relieved: )

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 :emoji_relieved:

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 :emoji_smiley:
 
Ultima modifica:
Riferimento: Come gestire il multithreading (basilare)Evitando il blocco del programma dur

ottima guida anche se non programmo piu da un bel pezzo in vb.net in qualsiasi linguaggio ritengo che sia importante usare i thread per velocizzare il programma e fare più operazioni nello stesso momento!!
 
Riferimento: Come gestire il multithreading (basilare)Evitando il blocco del programma dur

Si, è molto utile sopratutto su operazioni come cercare in mezzo a 20000 files dove il form rimane bloccato anche per una diecina di secondi senza segno di vita xD

Così invece la form è libera e ciò che deve essere caricato procede progressivamente
 
Riferimento: Come gestire il multithreading (basilare)Evitando il blocco del programma dur

Mi sarà utile, visto che sto intraprendendo il mio percorso con VB.
ottima guida bravo.
 
Riferimento: Come gestire il multithreading (basilare)Evitando il blocco del programma dur

Grazie mi hai aiutato molto ^^​