Multithreading en VB .NET

Julio 4, 2008

Que es un Thread

Un Thread se define como un camino posible de ejecucion a lo largo de un proceso. Cada proceso (programa) tiene uno o mas threads de ejecucion. Cuando se inicia una aplicacion se crea el proceso de la misma y consigo se ejecuta el thread principal a partir del entry point del mismo.

La creacion y gestión de threads en .Net se halla enmascarada bajo el namespace Threading. En particular para crear un nuevo Thread en nuestra aplicacion el framework de .Net nos provee una clase que gestiona todos los pequeños detalles del mismo, la clase Threading.Thread.

Apartments States

Cada thread de .Net tiene un apartment state, un Apartment es un conjunto de reglas coompartidas por un determinado grupo de objetos. El concepto de Apartment State viene de la transicion de los primeros windows que no soportaban multithreading y define el nivel de seguridad del thread (es decir que consideraciones tendra el sistema para acceder a los datos de los objetos que viven en dicho thread), a saber hay tres tipos de Apartment States:

  • MTA Multi Thread Apartment: Los Objetos se diseñan para correr en ambientes completamente asincronicos (las variables del objeto pueden cambiar en cualquier momento de la ejecucion del programa por lo que debe sincronizarse el acceso a las mismas)
  • STA Single Thread Apartment: Estos objetos estan diseñados para ejecutarse en threads unicos por lo que el acceso a sus datos debe de ser secuencial. En cada STA existira uno y solo un Thread. Las llamadas a los metodos de los objetos de un STA son sincronizados por una cola de Mensajes 
  • NA Neutral Apartments: Tiene la Particularidad de que los objetos que se ejecutan en este apartment pueden ser llamados Directamente desde cualquier otro apartment. Este apartment a la diferencia de MTA y STA no tienen ningún thread sino que los objetos son ejecutados en los threads desde los que son llamados

En un programa pueden existir varios STAs pero a lo sumo un solo MTA y un NA.

Ejemplo

Ahora volviendo al tema de la creacion de los threads para crear un nuevo thread simplemente entramos las siguientes lineas:


'Declaro un variable del Tipo Thread
Dim NuevoThread As Threading.Thread
'Instancio la variable llamando al constructor que recibe como parametro la direccion del punto de entrada del thread
NuevoThread = New Threading.Thread(AddressOf CreateNewForm)
'Seteo que tipo de Apartment State Tendra el thread
NuevoThread.SetApartmentState(Threading.ApartmentState.STA)
'Inicializo el thread
NuevoThread.Start()

 
Luego de que llamamos al metodo Start() comenzara a ejecutarse un nuevo thread en el proceso que comenzara ejecutando el Metodo que le especificamos en el constructor ” New Threading.Thread(AddressOf CreateNewForm) “, en este caso el metodo sera CreateNewForm que abre un formulario nuevo que correra bajo el thread creado. El thread finalizara cuando se cierre el formulario creado

 

 
Private Sub CreateNewForm()
Dim NuevoForm As New Consola
Application.Run(NuevoForm)
End Sub
 

Entry Filed under: .NET, COM, General, VB. Etiquetas: , , , , , , .

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Posts Más Vistos

 

Julio 2008
L M X J V S D
« Feb    
 123456
78910111213
14151617181920
21222324252627
28293031  

Etiquetas

Categoría Nube

.NET AjGenesis c++ COM Generacion de Codigo General Interfaces Patrones VB

del.icio.us