Pos no me he rendido con los THREADS

04/01/2006 - 20:47 por Ch0rY | Informe spam
rendirme no es lo mio, cansarme si, pero rendirme no.

Asi q estoy de vuelta con el tema

Si recordais, tenia intencion de hacer unos threads para "operar" con
varios archivos o varias filas de un listview a la vez.

Al principio no fui capaz de crear un simple thread, hoy lo he conseguido y
he sido capaz de crear una clase q lo use.

Pero no se como hacer q se ejecute 4 veces simultaneamente

Este es el proyecto q he creado

En un form, metemos un listview llamado lst_View y cuatro botones
(btn_h1,btn_h2,btn_h3,btn_h4)

Este es el codigo en el form

Imports System.Threading

Public Class Form1
Dim Hilin(3) As Pilla
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
End
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim Contador As Byte
Dim lvwItem As ListViewItem
For Contador = 1 To 254
lvwItem = New ListViewItem(Contador.ToString)
lvwItem.SubItems.Add("")
lst_View.Items.Add(lvwItem)
Next
End Sub

Private Sub btn_h1.Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_h1.Click, btn_h2.Click, btn_h3.Click,
btn_h4.Click
Dim Contador As Byte
For Contador = 0 To 4
If IsNothing(Hilin(Contador)) Then
Hilin(Contador) = New Pilla
If Not Hilin(Contador).Iniciado Then
Hilin(Contador).lista = Me.lst_View
Hilin(Contador).Iniciar()
Exit Sub
End If
End If
Next
End Sub
End Class

y esta es la clase que he creado (PILLA)

Imports System.Threading

Public Class Pilla
Delegate Sub Hazlo()
Public ElHilo As Thread = Nothing
Public lista As ListView

Private _Iniciado As Boolean

ReadOnly Property Iniciado() As Boolean
Get
Iniciado = _Iniciado
End Get
End Property

Public Sub Hilo()
Dim lvwItem As ListViewItem
_Iniciado = True
If lista.InvokeRequired Then
Dim Hilo2 As New Hazlo(AddressOf Hilo)
lista.Invoke(Hilo2)
Else
For Each lvwItem In lista.Items
If lvwItem.Checked Then Exit For
lvwItem.Checked = True
Dim Contador As Integer
For Contador = 0 To 65000
Application.DoEvents()
lvwItem.SubItems(1).Text = Format("0.00", Contador).ToString
Next
Next
End If
_Iniciado = False
End Sub

Public Sub Iniciar()
ElHilo = New Thread(New ThreadStart(AddressOf Hilo))
ElHilo.Start()
End Sub

End Class


Me gustaria q lo echaseis un vistazo y si no podeis decirme como hacer lo
que quiero, si me gustaria me dijerais, q os parece, q fallos veis q estoy
cometiendo, y tal y tal...


Gracias de nuevo.

Reconocereis q como cura no tendria precio, tol dia pidiendo :D

Preguntas similare

Leer las respuestas

#6 Ch0rY
22/01/2006 - 20:28 | Informe spam
Bueno, yastoy de nuevo con el tema, he hecho bastantes cosillas, ademas de
corregir algunos fallos entre ellos, el que comentas del
Dim ar As IAsyncResult = req.BeginGetResponse(AddressOf
DescargarFichero2, req)
Tambien he generado los eventos de la forma q indicas, pero uno me esta
dando "poblemas", o no lo he entendido bien o no lo entiendo, es el que
debuelve si la operacion se a completado con exito o hay una excepcion.

El codigo q tienes es


Public Class OperationCompletedEventArgs
Inherits EventArgs

Private _Success As Boolean
Public ReadOnly Property Success() As Boolean
Get
Return _Success
End Get
End Property

Private _Exception As Exception
Public ReadOnly Property Exception() As Exception
Get
Return _Exception
End Get
End Property

Public Sub New(ByVal Exception As Exception)
_Exception = Exception
_Success = Exception Is Nothing
End Sub
End Class

Public Class ContactsLoader
Public Event OperationCompleted As EventHandler(Of
OperationCompletedEventArgs)
...
Private OnOperationCompletedCallBack As SendOrPostCallback = New
SendOrPostCallback(AddressOf OnOperationCompleted)
...
Private Sub OnOperationCompleted(ByVal Exception As Object)
Dim e As New OperationCompletedEventArgs(Exception)
RaiseEvent OperationCompleted(Me, e)
End Sub
...
' La llamada
Context.Post(OnOperationCompletedCallBack, New
OperationCanceledException("La carga de los contactos ha sido cancelada"))
...
End Class

He intentado adaptarlo a lo que quiero hacer y no me ha funcionado, he
copiado y codigo tal cual, y tampoco me ha funcionado, he modificado tu
codigo y tampoco me ha funcionado.

El problema es q no me pasa el Texto de la excepcion "La carga de los
contactos ha sido cancelada" en mi caso "El fichero ya existe"
La llamada la hago asi HiloPrincipal.Post(SiDescargaCompletada, New
OperationCanceledException("El fichero ya existe"))

Mi.SiDescargaCompletada=Tu.OnOperationCompletedCallBack

Pos eso
Muchas gracias ooootravez
Chory
Respuesta Responder a este mensaje
#7 Jesús López
23/01/2006 - 08:18 | Informe spam
¿Por qué no mandas el código completo? es que así, me resulta imposible ver
lo que está mal.

Saludos:

Jesús López
Respuesta Responder a este mensaje
#8 Ch0rY
23/01/2006 - 15:25 | Informe spam
Quieres la aplicacion completa, solo la clase donde me da el problema?
Respuesta Responder a este mensaje
#9 Ch0rY
23/01/2006 - 15:41 | Informe spam
Creo q uno de los motivos x lo q no funciona, puedeser xq la llamada no la
realizo cuando se produce una excepcion, pero he intentado tb, llamarla con
un string y tampoco coge el valor del string.
Respuesta Responder a este mensaje
#10 Jesús López
23/01/2006 - 17:50 | Informe spam
Ya puestos envíame la aplicación completa en un zip a mi dirección de
correo.

Saludos:

Jesús López
MVP
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida