Uso de hilos

Download Report

Transcript Uso de hilos

Desarrollo de
componentes en Visual
Basic .NET
Descripción

Descripción de los componentes

Creación de componentes con servicio

Creación de clases de componentes

Creación de controles de formularios Windows Forms

Hilos de ejecución
 Descripción de los componentes

Tipos de componentes

Uso de módulos como componentes

Uso de clases como componentes

Uso de componentes en aplicaciones cliente no
gestionadas

Descripción de .NET Remoting
Tipos de componentes

Estructuras

Módulos

Clases

Clases de componentes

Componentes con servicio

Controles de usuario

Controles de usuario de formularios Windows Forms

Controles de usuario de formularios Web Forms
Uso de módulos como componentes

Declarar el módulo como público

Referenciar e importar el ensamblado en código cliente
Public Module MyMathFunctions
Public Function Square(ByVal lng As Integer) As Long
Return (lng * lng)
End Function
...
End Module
'Client code
Imports MyAssembly
...
Dim x As Long = Square(20)
Uso de clases como componentes

Declarar la clase como pública

Referenciar e importar el ensamblado en código cliente
Public Class Account
Public Sub Debit(ByVal AccountId As Long, Amount As Double)
'Perform debit action
End Sub
Public Sub Credit(ByVal AccountId As Long, Amount As Double)
'Perform credit action
End Sub
End Class
'Client code
Imports MyAssembly
Dim x As New Account( )
x.Debit(1021, 1000)
Uso de componentes en aplicaciones cliente no gestionadas

Establecer las propiedades del ensamblado



Generar un nombre seguro
Seleccionar Registrar para COM Interop en las
opciones de Generar
Exponer miembros de claes a COM y a los servicios de
componentes

Definir e implementar interfaces

Utilizar el atributo ClassInterface con valor AutoDual

Utilizar el atributo COMClass
Descripción de .NET Remoting
Cliente AppDomain
Servidor AppDomain
Marshal By Reference
Código
cliente
Formateador
Servidor
Proxy
Formateador
Canal
Objeto
servidor
Marshal By Value
Código
cliente
Copia
objeto
servidor
Formateador
Canal
Canal
Límite de Remoting
 Creación de componentes con servicio

Hospedar componentes en los servicios de
componentes

Uso de transacciones

Uso de la agrupación de objetos

Uso de cadenas de constructor

Uso de seguridad

Uso de otros servicios de componentes

Configurar ensamblados para usar los servicios
de componentes
Hospedar componentes en los servicios de
componentes

Agregar una referencia a System.EnterpriseServices en
el ensamblado

El espacio de nombres System.EnterpriseServices
proporciona:

Clase ContextUtil

Clase ServicedComponent

Atributos de ensamblado, clase y método
Uso de transacciones

El atributo Transaction especifica cómo participa una clase
en las transacciones

La clase ContextUtil proporciona votación en una transacción

El atributo AutoComplete impide el uso de los métodos
SetAbort, SetComplete y ContextUtil
<Transaction(TransactionOption.Required)> Public Class Account
Inherits ServicedComponent
Public Sub Debit(...)
'Perform debit action
ContextUtil.SetComplete( )
End Sub
<AutoComplete( )> Public Sub Credit(...)
'Perform credit action
'No SetComplete because AutoComplete is on
End Sub
End Class
Uso de la agrupación de objetos

La agrupación de objetos permite crear objetos con
antelación

El atributo ObjectPooling especifica MinPoolSize y
MaxPoolSize

ServicedComponent proporciona el método
CanBePooled
<ObjectPooling(Enabled:=True, MinPoolSize:=5, _
MaxPoolSize:=50)> _
Public Class Account
Inherits ServicedComponent
...
Protected Overrides Function CanBePooled( ) As Boolean
Return True
End Function
End Class
Uso de las cadenas de constructor

Especifican el atributo ConstructionEnabled para
indicar que se necesita una cadena de constructor

Reemplazan el método Construct para recuperar
información
<ConstructionEnabled(True)>Public Class Account
Inherits ServicedComponent
Protected Overrides Sub Construct(ByVal s As String)
'Called after class constructor
'Use passed in string
End Sub
End Class
Uso de seguridad

Los atributos de la configuración de seguridad habilitan
la configuración de la seguridad y su papel

La clase SecurityCallContext proporciona
comprobación de roles y ofrece información sobre el
llamador
<ComponentAccessControl(True), seguridadRole("Manager")> _
Public Class Account
Inherits ServicedComponent
Public Function GetDetails( ) As String
With seguridadCallContext.CurrentCall
If .IsCallerInRole("Manager") Then
Return .OriginalCaller.AccountName
End If
End With
End Function
End Class
Uso de otros servicios de componentes

Otros servicios de componentes incluyen:

Activación Just-in-time

Componentes encolados

Propiedades compartidas

Sincronización
Configurar ensamblados para usar los servicios de
componentes


Establecer atributos a nivel de ensamblado

ApplicationName

Description

ApplicationActivation: biblitoteca o aplícación servidora

AssemblyKeyFile
Uso de Regsvcs para registrar y crear aplicaciones de
servicios de componentes


Regsvcs.exe myApplication.dll
Uso de Lazy Registration

Aplicación registrada la primera vez que se utilice por
parte de un cliente
Demostración: Creación de un componente con
servicio
 Creación de clases de componentes

Arquitectura de una clase de componentes

Creación de una clase de componentes
Arquitectura de una clase de componentes
System.ComponentModel.Component
Interfaz
IComponent
Clases de componentes
Clases predefinidas
Clases personalizadas
Creación de una clase de componentes
1. Heredar de System.ComponentModel.Component

Realizar las inicializaciones por parte del constructor

Sobrecargar el método Dispose
2. Agregar los componentes ubicados

Utilizar elementos del Explorador de servidores o del
cuadro de herramientas
3. Crear la funcionalidad requerida

Propiedades, métodos y eventos
4. Generar el ensamblado
Demostración: Creación de un componente Stopwatch
Creación de controles de formularios Windows Forms

Heredar de la clase UserControl

Heredar de un control existente Windows Forms

Proporcionar atributos a los controles
Heredar de la clase UserControl

Heredar de System.Windows.Forms.UserControl

Agregar los controles necesarios al diseñador

Agregar propiedades y métodos que correspondan a los
de los controles constitutivos

Agregar propiedades y métodos adicionales

No InitProperties, ReadProperties ni WriteProperties

El almacenamiento de propiedades es automático
Heredar de un control existente Windows Forms

Permite mejorar la versión de un determinado control

Heredar de un control System.Windows.Forms
Public Class MyTextBox
Inherits System.Windows.Forms.TextBox
Private strData As String
Public Property HiddenData( ) As String
Get
Return strData
End Get
Set(ByVal Value As String)
strData = Value
End Set
End Property
...
End Class
Proporcionar atributos a los controles

System.ComponentModel proprociona atributos a los
controles

A nivel de clase: DefaultProperty, DefaultEvent,
ToolboxBitmap

A nivel de propiedad: Category, Description, DefaultValue
Imports System.ComponentModel
<ToolboxBitmap("C:\txticon.ico"), DefaultEvent("Click")> _
Public Class MyTextBox
Inherits System.Windows.Forms.UserControl
<Category("Appearance"), _
Description("Stores extra data"), _
DefaultValue("Empty")> _
Public Property HiddenData( ) As String
...
End Property
...
End Class
Demostración: Creación de una caja de texto mejorada
Manejo de hilos de ejecución

¿Qué es un hilo?

Ventajas de múltiples hilos de ejecución

Creación de hilos

Uso de hilos

Cuándo utilizar el manejo de hilos
¿Qué es un hilo?

La unidad de ejecución que procesa la CPU


Todos los procesos de una aplicación contienen al menos un hilo
Los hilos están planificados

Parece que el equipo realiza varias tareas a la vez

Cada hilo contiene su propia pila de llamadas y almacenamiento
Proceso 1
Proceso 2
Programador de subprocesos
Subproc.1
Subproc. 321
CPU
Subproc. 2
Subproc. 3
Ventajas de múltiples hilos de ejecución

Mejor respuesta de la interfaz de usuario

Ejemplo: barra de estado

Sin bloqueos

Comunicación asíncrona

Sin afinidad de hilos

Los objetos no están vinculados a un hilo
Creación de hilos

Uso de la clase System.Threading.Thread




El constructor especifica el método delegado
Los métodos proporcionan control del procesamiento de
hilos
Las propiedades proporcionan información de estado y
prioridades
Utilizar una clase si se requieren parámetros

Permitir acceso público a variables clase

Lanzar un evento cuando finalice
Uso de hilos
Class Calculate
Public iValue As Integer
Public Event Complete(ByVal Result As Integer)
Public Sub LongCalculation( )
'Perform a long calculation based on iValue
...
RaiseEvent Complete(iResult)
'Raise event to signal finish
End Sub
End Class
Sub Test( )
Dim calc As New Calculate( )
Dim th As New Threading.Thread(AddressOf calc.LongCalculation)
calc.iValue = 10
AddHandler calc.Complete, AddressOf CalcResult
th.Start( )
End Sub
Sub CalcResult(ByVal Result As Integer)
...
End Sub
Cuándo utilizar el manejo de hilos

Utilizar los hilos con precaución


El uso de más hilos requiere más recursos del sistema
Sincronizar el acceso a recursos compartidos


Evitar que dos hilos accedan simultáneamente a datos
compartidos
Utilizar la instrucción SyncLock para bloquear
secciones de código
Sub Worker( )
SyncLock(theData)
'Lock this object variable
theData.id = iValue
'Perform some lengthy action
iValue = theData.id
End SyncLock
'Unlock the object variable
End Sub
Demostración: Uso de la instrucción SyncLock