Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: pandoro en 4 Junio 2008, 19:35 PM

Título: DoEvents se cuelga!
Publicado por: pandoro en 4 Junio 2008, 19:35 PM
Hola tengo una pregunta sobre una aplicacion que tengo hecha en Visual Basic 6, hace unos cuantos bucles, y dentro de uno tengo un DoEvents y cuando da un par de vueltas se cuelga en el DoEvents y no hace nada mas, se queda en esa linea. No se como solucionarlo.

Alguien me podria ayudar?

Gracias.

Un saludo.
Título: Re: DoEvents se cuelga!
Publicado por: Mad Antrax en 4 Junio 2008, 19:45 PM
copy/paste todo el trozo de código donde aparecen los bucles... asi por telépatia es algo difícil.
Título: Re: DoEvents se cuelga!
Publicado por: Kizar en 4 Junio 2008, 20:44 PM
El DoEvents no es el problema, le problema esta en que no se cumplen las condiciones para salir de el bucle y se convierte en un proceso infinito.
El DoEvents solo se utiliza dentro de los bucles para consumir menos cantidad de recursos del sistema, es como una pausa muy pequeña.
Título: Re: DoEvents se cuelga!
Publicado por: Mad Antrax en 4 Junio 2008, 21:22 PM
Un ejemplo claro para usar DoEvents:

Código (vb) [Seleccionar]
For i = 1 to 1000
   Label1.Caption = i
Next i


Al ejecutar esto, el usuario sólo alcanzará ver el número 1000 de forma instantánea. Si queremos mostrar el progreso del bucle podemos usar lo siguiente:

Código (vb) [Seleccionar]
For i = 1 to 1000
   Label1.Caption = i
   If i Mod 10 = 0 Then
      DoEvents
      Sleep 250
   End If
Next i


Esta nueva condición que hay dentro del bucle hace que el código entre en modo Sleep cada 10 iteraciones. Es facil... Dividimos la variable i entre 10, si el resto de la división es 0 entonces la condición se cumple. En este ejemplo el usuario verá:

1,10,20,30,40, ..., 980, 990, 1000

Si cambiamos la condición:

Código (vb) [Seleccionar]
If i Mod 50 Then

El usuario obtendrá:

1,50,100,150, ..., 950, 1000

(Ojo, Sleep es una API que no he declarado en este ejemplo, para usarla primero hay que declarar dicha API)

Saludos!!