ProgressBar

Iniciado por rigorvzla, 19 Diciembre 2017, 19:31 PM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

hola amigos, alguien podria explicarme como se debe hacer para enlazar un ProfressBar en el proceso de un programa, hace un tiempo atras me ayudaron hacer un extractor y descompresor, cosa que funciona de joya. la cuestion es que si son archivos muy pesados , el cumple su trabajo tarde o temprano, pero no se sabe si esta o no en funcionamiento, hasta que termina y da una alerta hablada.

me podrian ayudar porfavor.

**Aincrad**

#1
1) si , quieres que te ayuden a poner una barra de carga mientras el programa descomprime o comprime debes poner el code en cuestión.

2) en Internet se consiguen vídeos y ejemplos de la utilización de el control ProgressBar (Barra de Progreso)  , solo debes tomar un tiempo a investigar un poco .

______________________________________________________________________________________________________________________________

bueno en fin te dejo unos tutos y ejemplos :

Tutorial 1

Tutorial 2

Tutorial 3

ejumplos:

Ejemplo 1

Ejemplo 2

Ejemplo 3

PD: Con el contenido que te deje , Podrás hacer lo que pides. XD




rigorvzla

#2
este es el codigo

leere la informacion tambien debo colocarlo a este , y a dos codigos mas similares descompresion y compresion de directorios ya estan los codigos solo es cosa de hacer la barra y aunque vi el tutorial no se si aplica a WPF no trabajo eso en form


REEDITO gracias por esos tutoriales me guie con los videos de sugerencia y me fue de maravillas ahora pregunto, las barras son de cierto modo algo simbolico , hay alguna forma de calcular exactamente el tiempo de duracion de un proceso?? en mi caso diversos archivos para comprimir. en casos distintos

rigorvzla

re edito de nuevo... en donde estoy aplicando la barra tengo el comando waitforexit
y eso me detiene la barra de progreso y es necesario ese comando que deberia hacer para que no se detenga la barra???

Eleкtro

#4
Cita de: rigorvzla en 19 Diciembre 2017, 19:31 PMalguien podria explicarme como se debe hacer para enlazar un ProfressBar en el proceso de un programa, hace un tiempo atras me ayudaron hacer un extractor y descompresor, cosa que funciona de joya. la cuestion es que si son archivos muy pesados , el cumple su trabajo tarde o temprano, pero no se sabe si esta o no en funcionamiento, hasta que termina y da una alerta hablada.

Era obvio que tarde o temprano ibas a llegar a este punto... yo ya te avisé desde el "día 1" de como lo deberias hacer:

Cita de: Eleкtro en 21 Noviembre 2017, 13:56 PMLo más apropiado para obtener un control absoluto y eficiente sobre el procedimiento de compresión y descompresión de 7-Zip sería que implementases las funciones exportadas en la librería 7za.dll mediante Platform Invoking, puedes ver un ejemplo ya hecho aquí:

....entiendo que esto es mucho pedir ya que estás empezando en .NET y desconoces muchos conceptos todavía, así que descartamos esa opción, pero sería preferible que en lugar de lo que estás haciendo actualmente llamando al executable 7za.exe sin más, en lugar de eso al menos utilizases la librería SevenZipSharp (a pesar de que esté bastante desactualizada), ya que al menos proporciona un modo mucho más seguro y sofisticado de control mediante su estructuración de código orientado a eventos, esto te permimtiría controlar facilmente el progreso de compresión/descompresión y cualquier error suscribiéndote al evento correspondiente

Puesto que no has hecho caso a nada de eso ni piensas hacerlo, ahora lo único a lo que puedes recurrir es a la forma menos eficiente de implementar un controlador de progreso: tienes que leer/parsear la salida stdOut y stdErr del programa command-line, y apañártelas para intentar calcular un porcentaje de progreso en base a los datos que se muestren en el output de dicho programa. Nadie va a hacer esto por ti por cuestión de tiempo y desgana (sinceramente no vale la pena hacerlo, teniendo otras opciones ya mencionadas), de todas formas en Google puedes encontrar miles de ejemplos sobre como leer la salida de un programa de forma sincrónica y asincrónica, y luego solo tienes que adaptar los principios de esos ejemplos, a tu escenario.





Cita de: rigorvzla en 19 Diciembre 2017, 23:45 PMlas barras son de cierto modo algo simbolico

Solamente serán algo simbólico si por tu parte no implementas un algoritmo que calcule el progreso, y eso solamente se puede hacer en los casos en los que en la salida del programa command-line se muestre un valor de porcentaje que puedas leer/capturar u otro dato que te pueda servir para el mismo propósito.

Cita de: rigorvzla en 19 Diciembre 2017, 23:45 PMhay alguna forma de calcular exactamente el tiempo de duracion de un proceso??

Lo más parecido que puedes encontrar es:

Citar% Processor Time is the percentage of elapsed time that all of process threads used the processor to execution instructions.

...o bien puedes utilizar la propiedad Process.StartTime junto a un StopWatch. Pero nada de esto es lo que estás preguntando en realidad...

Por si no ha quedado claro del todo: evidentemente no existe modo alguno de predecir cuando finalizará la ejecución de un programa, a menos que calcules el porcentaje de la forma en la que ya se te ha explicado.

Saludos.








rigorvzla

como siempre gracias elektro , aqui se abren caminos para continuar la investigacion y en efecto calcular el progreso de una aplicacion en este caso de comprimir y extraer requiere mas documentacion del 7z  , por otro lado implemente la barra de manera y en efecto no es nada que ver con el proceso real mas si indica al usuario que algo esta pasando, que era la razon inicial por lo que la necesitaba ya en base a esto me pondre a investigar para que sea ya de manera exacta y precisa .
Gracias nuevamente a todos los que me asistieron

**Aincrad**

me da curiosidad ese programa para comprimir y descomprimir . algún  podrías subir el .exe?




rigorvzla

Cita de: **Aincrad** en 20 Diciembre 2017, 21:58 PM
me da curiosidad ese programa para comprimir y descomprimir . algún *dia* podrías subir el .exe?
Hola es posible pero es, es un complemento que usa el proyecto que hago, en youtube tengo un video solo que fue el primer proyecto que hice, luego no me gusto y empece otro nuevo basicamente lo mismo pero planteado de otra manera, no se esto del spam y los permisos de aqui asi q prefiero dejarlo de lado como tal y limitarme a compatir mis inquietudes, y evitar problemas jeje .

Basicamente lo que hace este es comprimir y descomprimir archivos jeje nada del otro mundo  use al 7z y bueno es conocido ya por la mayoria.

**Aincrad**

usas el DLL o la herramienta comandline?




Eleкtro

#9
Cita de: rigorvzla en 20 Diciembre 2017, 21:33 PM
como siempre gracias elektro , aqui se abren caminos para continuar la investigacion y en efecto calcular el progreso de una aplicacion en este caso de comprimir y extraer requiere mas documentacion del 7z  , por otro lado implemente la barra de manera y en efecto no es nada que ver con el proceso real mas si indica al usuario que algo esta pasando, que era la razon inicial por lo que la necesitaba ya en base a esto me pondre a investigar para que sea ya de manera exacta y precisa .
Gracias nuevamente a todos los que me asistieron

No puedo tener ninguna objeción contigo, te tomas las críticas muy bien, sin embargo me jode un poco que sigas empeñado en usar 7z.exe a estas alturas (cuando se te dió una muy buena alternativa más facil de implementar), ¿no ves que todo son problemas para ti? xD. Implementar un parsing de datos de la salida (stdOut / stdErr) de 7z.exe no es que sea algo imposible ni tampoco muy complicado, pero es un coñazo, tienes que buscar la linea exacta en la salida para encontrar el dato que te sirva (el valor de porcentaje "n%") y capturarlo, con eso ya tendrías el porcentaje para tu progressbar, pero tienes que capturar muchos más datos adicionales de la salida del programa 7z.exe para controlar posibles mensajes de error en la compresión/extracción.

Si al final solo quieres usar la barra de progreso como algo simbólico para indicar que "algo está pasando" (y no se sabe cuando acabará), entonces quizás prefieras ponerla en estado indeterminado:

El aspecto te quedaría más o menos como ves aquí abajo (no exactamente así, pero no he encontrado otro GIF mejor):



Saludos.