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?

