Gracias por el interés, a ver si me puedes ayudar!!
El código de lo q tiene q ver con el hilo es este:
Código:
'
'Llama al evento asociado a un clic sobre el botón iniciar del
'formulario
Private Sub BIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BIniciar.Click
comandoIniciar()
End Sub
'
'Llama al evento asociado a un clic sobre el botón parar del
'formulario
Private Sub BParar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BParar.Click
banderaLeer = True
End Sub
'
'Evento asociado a la selección del submenú Leer BD del menú Archivo
'descripción: inicia el hilo que lee información de la base de datos
'y la muestra en el formulario principal
Public Sub comandoIniciar()
banderaLeer = False
ThreadLeerBD = New System.Threading.Thread(AddressOf Me.EjecutaHiloBD)
ThreadLeerBD.start()
ThreadLeerBD.IsBackground()
actualizaLeerBD(ThreadLeerBD)
compruebaHiloLeerActivo(ThreadLeerBD)
End Sub
'
'Método actualizaLeerBD
'descripción: se encarga de dejar de leer en el caso de que se haya
'pulsado el botón parar
Public Sub actualizaLeerBD(ByVal ThreadLeerBD As System.Threading.Thread)
System.Windows.Forms.Application.DoEvents()
If ThreadLeerBD.ThreadState.Running = True Then
ThreadLeerBD.Start()
ThreadLeerBD.IsBackground = True
ElseIf ThreadLeerBD.ThreadState.Unstarted = True Or ThreadLeerBD.ThreadState.Stopped = True Then
ThreadLeerBD = New System.Threading.Thread(AddressOf Me.EjecutaHiloBD)
ThreadLeerBD.Start()
ThreadLeerBD.IsBackground = True
End If
End Sub
'
'Método compruebaHiloLeerActivo
'descripción: se encarga de comprobar si el hilo leer está activo, y en
'caso de que no lo esté, volver a iniciarlo tras una pausa de 1 segundo.
'
Public Sub compruebaHiloLeerActivo(ByVal ThreadLeerBD As System.Threading.Thread)
While banderaLeer = False
System.Windows.Forms.Application.DoEvents()
'ThreadLeerBD.Sleep(500)
actualizaLeerBD(ThreadLeerBD)
End While
End Sub
'
'HILO LEE BASE DE DATOS
'descripción: se encarga de leer una base de datos y mostrar por
'pantalla en la interfaz principal los valores que de ella obtiene.
Public Shared Sub EjecutaHiloBD()
Dim objAcciones As New OleDbCommand
'Define una transacción, para evitar conflictos de concurrencia
Dim transaccion As OleDbTransaction
Dim dt As DataTable
Dim objAdapter
'Dim OleDbUpdateCommand As OleDbCommand = New OleDbCommand
'Variable de bucle
Dim i As Integer
'Para manejar las filas de la base de datos
Dim fila As Integer
'Para conocer el número de filas
Dim n As Integer
'Cadenas temporales para las variables de la base de datos
Dim sDescripcion As String
Dim sValor As String
Dim sVisibilidad As String
Dim sID As String
'Crea un array de etiquetas para manejar los datos que en ellas se muestran más cómodamente
Dim etiquetas(10) As Label
etiquetas(0) = Label1
etiquetas(1) = Label2
etiquetas(2) = Label3
etiquetas(3) = Label4
etiquetas(4) = Label5
etiquetas(5) = Label6
etiquetas(6) = Label7
etiquetas(7) = Label8
etiquetas(8) = Label9
etiquetas(9) = Label10
'Array que contiene los textfields del formulario
Dim camposTexto(10) As TextBox
camposTexto(0) = TextBox1
camposTexto(1) = TextBox2
camposTexto(2) = TextBox3
camposTexto(3) = TextBox4
camposTexto(4) = TextBox5
camposTexto(5) = TextBox6
camposTexto(6) = TextBox7
camposTexto(7) = TextBox8
camposTexto(8) = TextBox9
camposTexto(9) = TextBox10
'Array que contiene un campo booleano con la visibilidad de un campo
Dim visibilidad(10) As Boolean
Try
'Se abre la conexión de la base de datos
objConn.Open()
'Se escogen los registros de la base de datos que se desean
objAdapter = New OleDbDataAdapter("SELECT * FROM Propiedades ORDER BY ID", objConn)
'Inicio de la transacción
transaccion = objConn.BeginTransaction() 'IsolationLevel.ReadCommitted)
objAcciones.Transaction = transaccion
objAcciones.Connection = objConn
objAdapter.selectcommand.transaction = transaccion
'Se almacena la base de datos en el dataTable
dt = New DataTable
objAdapter.Fill(dt)
'Se almacena en n el número de filas de la base de datos
n = dt.Rows.Count
'Se asocia la conexión con el objeto acciones
objAcciones.Connection = objConn
If n = 0 Then
MessageBox.Show("No se ha encontrado ningún registro que coincida con la selección")
Else
'Recorre las filas en el dataTable y las va asignando a las etiquetas
'del formulario principal para que se muestren
For fila = 0 To n - 1
'Asignar a las variables el contenido del registro
sDescripcion = dt.Rows(fila)("descripcion").ToString
sValor = dt.Rows(fila)("valor").ToString
etiquetas(fila).Text = sDescripcion
camposTexto(fila).Text = sValor
Next
'Finalización exitosa de la transacción
transaccion.Commit()
End If
Catch ex As Exception
'En el caso de que haya algún error, deshace los cambios y
'muestra un aviso con información sobre el problema
transaccion.Rollback()
MessageBox.Show(Err.Description, "Información del sistema")
Finally
'Cierra la conexión de la base de datos
objConn.Close()
End Try
End Sub
y algo q haría q se pare, sería la selección de cualquier menú Item como por ejemplo:
Código:
Private Sub MICbd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MICbd.Click
Try
Dim dlgFile = New OpenFileDialog
dlgFile.Filter = "Base de datos (*.mdb) | *.mdb"
dlgFile.Title = "Selecciona la base de datos"
'Si el diálogo devuelve OK
If dlgFile.ShowDialog() = DialogResult.OK Then
'Nombre del archivo elegido, con su ruta completa,
'equivale a la base de datos
ruta = dlgFile.FileName
End If
Catch ex As Exception
MessageBox.Show("La base de datos no ha sido seleccionada correctamente", "Aviso")
End Try
End Sub