Visual Basic.NET - Problemas para salir de bucle for each

 
Vista:

Problemas para salir de bucle for each

Publicado por Manolo Correa (1 intervención) el 21/03/2007 15:15:05
Hola.
Tengo el siguiente codigo

Dim directorio As New IO.DirectoryInfo(carpeta.Text)
Dim diar1 As IO.FileInfo() = directorio.GetFiles("*.jpg")
Dim dra As IO.FileInfo

For Each dra In diar1
If saliendo = False Then

pictureBox2.Image = Image.FromFile(dra.FullName)
pictureBox2.Refresh()
ultimoFichero.Text = dra.FullName
ultimoFichero.Refresh()
espera(CInt(RefrescoSegundos.Text))
Else
Exit For
End If
Next

Basicamente lo que hace es que muestra una secuencia de imagenes que haya en un directorio. Cada imagen se muestra un numero de segundos determinado por el contenido de una caja de texto (refrescoSegundos). El codigo funciona. Se ve la secuencia de imagenes y todo acaba correctamente.

Mi problema viene cuando quiero interumpir la secuencia por medio de un boton que pone la variable saliendo a true (variable global) que activa el exit for. No solo es es que no funciona es que pasan cosas extrañas. Si le das una vez al boton que pone a true la variable saliendo no pasa nada. Si le das varias veces el programa se queda como colgado y al cabo de un buen rato (como medio minuto) sale la ultima imagen de la secuencia.

¿Alquien sabe que es lo que estoy haciendo mal?
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas para salir de bucle for each

Publicado por Hugin (83 intervenciones) el 21/03/2007 19:27:31
Ok Vamos a trabajar con procesos multihilos para ello lo priemro que debes importar es

Imports System.Threading

Dim Hilo1 As New Thread(AddressOf cargar)
Dim Hilo2 As New Thread(AddressOf Parar)
Private Sub btnCargarImagenes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCargarImagenes.Click
Hilo1.Priority = ThreadPriority.BelowNormal
Hilo2.Priority = ThreadPriority.BelowNormal
Hilo1.Start()
End Sub
Sub cargar()
Dim directorio As New IO.DirectoryInfo("D:\FotosTrabajo") '
Dim diar1 As IO.FileInfo() = directorio.GetFiles("*.jpg")
Dim dra As IO.FileInfo
For Each dra In diar1
If saliendo = False Then
PictureBox1.Image = Image.FromFile(dra.FullName)
'cda tres segundos voy a mostra una imagen
System.Threading.Thread.Sleep(3000)
Else
MsgBox("Haz Cancelado la Opreacion de Cargar Imagenes")
Exit For
End If
Next
End Sub
Sub Parar()
saliendo = True
End Sub

Private Sub btnSalirSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsalir.Click
Hilo2.Start()
End Sub

puedes imvetigar sobres procesos multihilos y haber si derrepente mejoras loq ue te enviado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar