Autor |
Mensaje |
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
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.
última edición por razaAztk el Jueves, 04 Julio 2013, 01:32; editado 1 vez
|
#1 Jueves, 04 Julio 2013, 01:30 |
|
|
Dani26
Analista Programador
Registrado: Junio 2010
Mensajes: 365
Edad: 58 Ubicación: Montevideo
|
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
=================== Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
|
#2 Jueves, 04 Julio 2013, 01:46 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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
|
#3 Jueves, 04 Julio 2013, 08:12 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
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 que tiene fondo transparente.
Ahora estoy viendo que existe el componente gb.Task, estoy leyendo su documentación a ver si me puede ayudar.
Gracias. Saludos!
|
#4 Jueves, 04 Julio 2013, 21:02 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
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:
Saludos!
|
#5 Jueves, 04 Julio 2013, 22:05 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
Application.Busy debería ser la solución.
|
#6 Viernes, 05 Julio 2013, 00:09 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
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:
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.
|
#7 Viernes, 05 Julio 2013, 00:11 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
Re: No Sé Cómo Indicarle Al Usuario Que Espere A Que Termine Una Operación
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!
|
#8 Sabado, 06 Julio 2013, 22:38 |
|
|
|