Exemple treballar amb fils amb .Net

Exemple treballar amb fils amb .Net (Threads)

Segons la Wikipedia la definició d’un fil en programació és:

“La creació d’un nou fil és una característica que permet a una aplicació realitzar diverses tasques alhora (concurrentment). Els diferents fils d’execució comparteixen una sèrie de recursos tals com l’espai de memòria, els arxius oberts, situació d’autenticació, etc. Aquesta tècnica permet simplificar el disseny d’una aplicació que ha de dur a terme diferents funcions simultàniament”

És per tant una opció molt interessant en tasques de programació que qualsevol dia podem necessitar, un exemple clar seria el tractament de moltes dades en una mateixa operació en què el fil principal de l’aplicació es queda treballant i ens dóna la sensació que l’aplicació s’ha penjat.

Exemple en VB.net

Amb aquest exemple simplement mostraré l’execució d’un o diversos fils sense entrar en profunditat, simplement l’exemple serà per realitzar una tasca d’execució independentment de la principal.

En primer lloc hem de fer la importació a la classe Threads:

Imports System.Threading

Després creem les següents variables dins de la classe:

Private mThreadFic As Thread
Private mProcesarFic As panSeleccioSetmanaParades

On “panSeleccioSetmanaParades” és la pròpia classe, en aquest cas és un formulari.

Després hem d’arrencar el fil en el moment que ens interessi, i hem d’especificar que mètode de la classe volem iniciar el fil:

mThreadFic = New Thread(New ThreadStart(AddressOf Me.imprimirRutes))
mThreadFic.Start()

On “imprimirRutes” és el mètode de la classe que utilitzem en el fil.

A partir d’aquest moment s’inicià un fil diferent al fil principal del programa, es pot consultar en qualsevol moment l’estat d’aquest fil des del fil principal d’aquesta manera:

ThreadFic.IsAlive 

Conclusions

Treballar amb fils en. NET o qualsevol llenguatge de programació és una tasca bastant senzilla i molt interessant, encara que hem de prestar atenció i cura en no deixar molts fils oberts i sense control.