Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con Múltiples-Hebras

Estas en el tema de Problema con Múltiples-Hebras en el foro de .NET en Foros del Web. Hola buenas tardes, verán, tengo el siguiente problema, resulta que estoy ejecutando 5 hebras distintas sobre un mismo método de uan clase, pero con objetos ...
  #1 (permalink)  
Antiguo 28/10/2005, 14:44
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Problema con Múltiples-Hebras

Hola buenas tardes, verán, tengo el siguiente problema, resulta que estoy ejecutando 5 hebras distintas sobre un mismo método de uan clase, pero con objetos distintos para cada Hebra. Dicho método escribe en una caja de texto Multilinea.

Mi intención es que se ejecute la primera Hebra, bloqueando la caja de texto, hasta que acabe, para que despues empiece la segunda y poder ver los datos recibidos en orden.

El codigo que tengo es más o menos el siguiente:


FORMULARIO:
Código:
Private Sub btnScanear_Click()
        _Inicio = CInt(txtIni.Text)
        _Fin = CInt(txtFin.Text)


        patron = CInt((_Fin - _Inicio) / 5)
        For inicio = _Inicio To _Fin Step patron
            fin = inicio + patron
            If fin > Me._Fin Then
                fin = _Fin
            End If
            objScaneador = New ClaseScaneador(inicio, fin, _Fin, Me)
            Hebra = New Thread(AddressOf objScaneador.EscanearPuertos)
            Hebra.IsBackground = True
            Hebra.Start()
        Next
End Sub



METODO DE LA CLASE
Código:
   Public Sub EscanearPuertos()
        Dim Puerto As Integer
        For Puerto = _csInicio To _csFin

            objEndPoint = New IPEndPoint(IPAddress.Parse(_direccionIP), Puerto)
            objSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

            Try
                objSocket.Connect(objEndPoint)
            Catch ex As Exception
            Finally
                SyncLock _frmReferencia.txtInfo
                    If objSocket.Connected Then
                        _frmReferencia.txtInfo.Text &= "Puerto " & Puerto & " esta Abierto. --" & AppDomain.GetCurrentThreadId & vbCrLf
                    Else
                        _frmReferencia.txtInfo.Text &= "Puerto " & Puerto & " esta Cerrado. --" & AppDomain.GetCurrentThreadId & vbCrLf
                    End If
                End SyncLock
                SyncLock _frmReferencia.pBar
                    _frmReferencia.pBar.Value = CInt((Puerto * 100) / _finFinal)
                End SyncLock

                objSocket.Close()
                objEndPoint = Nothing
                Application.DoEvents()
            End Try
        Next
    End Sub



Bien, ejecutar me ejecuta las hebras, pero en la caja de texto, me ejecuta las hebras con el siguiente orden:
Puerto 21 esta abierto -- 1749
Puerto 45 esta cerrado -- 1890
Puerto 80 esta abierto -- 1456
Puerto 125 esta cerrado -- 1327
Puerto 22 esta abierto -- 1749
Puerto 46 esta cerrado -- 1890
Puerto 81 esta cerrado -- 1456
Puerto 126 esta cerrado -- 1327


Como podeis ver no es el orden deseado, y bueno, yo he puesto el SyncLock y creo que con eso debería bastar, pero ya veo que no.


¿Alguien puede decirme que estoy haciendo mal por favor?
__________________
Charlie.
  #2 (permalink)  
Antiguo 29/10/2005, 13:07
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Problema solucionado.

Lo único que tenía que cambiar era el orden de aparición del SyncLock, y lo puse antes del Bucle.

Asi si funciona. Saludos, espero que le sirva a alguien esta información.
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:28.