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: .NET, Apartment, COM, MTA, Multithreading, STA, Threading.
Trackback this post | Subscribe to the comments via RSS Feed