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?