No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación


Subject: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
Que tal compañeros.

Verán, tengo una aplicación en la que hago una operación que tarda mucho tiempo y pareciese que la aplicación se quedase "colgada". Una idea que tuve fue que mientras la operación se estuviera efectuando presentar una animación, pero incluso esa animación se queda pasmada.

Algún consejo para evitar ese feeling de que la aplicación está colgada?

Gracias. Saludos!

Edito:

Se me olvidó dar datos de mi sistema.

Es un programa en gambas3, en un SO Ubuntu 12.04......... y la operación es un método privado de una clase que creé, en dicho método itero sobre cada pixel de una imágen y ejecuto operaciones matematicas.

Last edited by razaAztk on Thursday, 04 July 2013, 01:32; edited 1 time in total
Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
¿Que tal una barra de progreso lenta? ¿O un label que diga "Ejecutando proceso, por favor espere ...o aproveche para ir al baño"?
¿Qué tantos segundos o minutos lleva el proceso?
Saludos

Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
Tengo algo que te servirá:

Se trata de un formulario "FormPensando" con un picture animado (.gif ) de un reloj (como los que aparece en Android) y un texto "Espere por favor....".

Descarga:
https://constructordiploma.googleco...rmPensando.form
https://constructordiploma.googleco...mPensando.class
icono que uso:
https://code.google.com/p/construct.../icoLoading.gif

Este es llamado desde donde lo necesites:
Dim pensando As New FormPensando
pensando.Show()
Wait 0.5 'se necesita un cierto retardo para que se muestre el formulario...
'empieza tu codigo de calcular o que tarde mucho tiempo.... mientras el usuario ve el mensaje+icono reloj del formulario
....
....
'cuando hayas terminado de calcular, cerramos el formulario:
pensando.parar = True
pensando.Delete()



Si quieres ver algunos programas que lo usa, te los puedes descargar desde:
http://constructordiploma.blogspot.com.es/p/descargar.html
http://creadordeorlas.blogspot.com.es/p/descargar.html
http://generadorcarnets.blogspot.com.es/p/descargar.html

Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
Gracias por su respuestas.

Dani26, la operación demora como un par de segundos. Aunque el problema no es como presentar que el usuario espere, más bien es que mientras se realiza la operación todo pareciera que se queda parado (incluyendo una posible barra o animación)....... esperaba que me recomendaran algún recurso para programar tareas paralelas o algo así.

Jsbsan, de hecho algo parecido a tu aporte tengo implementado, igual con el Wait; pero cuando termina el tiempo del Wait la animación igual se sigue quedando parada. Por cierto yo de animación estoy usando wait que tiene fondo transparente.

wait

Ahora estoy viendo que existe el componente gb.Task, estoy leyendo su documentación a ver si me puede ayudar.

Gracias. Saludos!

Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
Bueno, con la idea de usar Task ya no seguí porque parece ser que es algo equivalente a como si ejecutaras una segunda aplicación gambas con una instrucción Exec con la cual sólo te puedes comunicar con la I/O standard, por lo que sólo puedes usar Strings. Ver:

[0] http://www.gambasdoc.org/help/comp/gb/task?v3
[1] http://comments.gmane.org/gmane.comp.lang.gambas.user/20536
[2] http://www.mail-archive.com/gambas-...t/msg22064.html

Pero en cambio, gracias a [2], si incluyo una sentencia Wait (ver [3]) en un loop donde está la mayor carga de trabajo en mi clase, la animación (y cualquier otra evento pendiente) se actualiza y ya no se ve como trabada.

[3] http://gambasdoc.org/help/lang/wait?show&v3

Bueno de hecho yo tengo un montón de loops anidados, y para no estar actualizando cada rato y eso me consuma mucho tiempo de ejecución, hice algo como:

Wait 0.1
For i = 0 To FIN_1
For j = 0 To FIN_2
...
While cola.Length
...
For dx = -1 To 1
For dy = -1 To 1
...
Next
Next
Endif
Wend
...
Next
If Not (i % 25) Then Wait '' Esta línea es la importante; sólo actualizo eventos un número reducido de veces
Next


Saludos!

Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
Application.Busy debería ser la solución.

Profile PM  
Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
razaAztk escribió: [Ver mensaje]
Bueno, con la idea de usar Task ya no seguí porque parece ser que es algo equivalente a como si ejecutaras una segunda aplicación gambas con una instrucción Exec con la cual sólo te puedes comunicar con la I/O standard, por lo que sólo puedes usar Strings. Ver:


Esto no es verdad. Con una instancia Task tienes mas control sobre la tarea que se esta ejecutando, y es perfectamente posible enviar Arrays o Collections serializandolos, cosa que con Write es automatica.

Profile PM  
Subject: Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
sebikul escribió: [Ver mensaje]
Application.Busy debería ser la solución.


Ok, gracias. Es lo que usaré.

Acerca de lo que me comentas sobre los arrays, bueno ya será en otra ocación en que estudie eso. Te agradezco la info.

Saludos!


Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1079s (PHP: -26% SQL: 126%)
SQL queries: 24 - Debug Off - GZIP Enabled