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