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.
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:
Lo 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.
las 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.
hay alguna forma de calcular exactamente el tiempo de duracion de un proceso??
Lo más parecido que puedes encontrar es:
% 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.