Foros del Web » Programación para mayores de 30 ;) » .NET »

[C#] Barra de progreso mientras hago una acción que puede tardar

Estas en el tema de [C#] Barra de progreso mientras hago una acción que puede tardar en el foro de .NET en Foros del Web. Buenas, pues eso, para que el usuario sepa que el programa está en proceso haciendo cualquier cosa, me gustaría poner una barra de progreso, por ...
  #1 (permalink)  
Antiguo 19/09/2015, 04:55
 
Fecha de Ingreso: julio-2011
Mensajes: 76
Antigüedad: 12 años, 9 meses
Puntos: 1
[C#] Barra de progreso mientras hago una acción que puede tardar

Buenas, pues eso, para que el usuario sepa que el programa está en proceso haciendo cualquier cosa, me gustaría poner una barra de progreso, por ejemplo, para un archivo que tiene que copiarse de un directorio a otro.

Cuando hago click en un botón, ejecuto la siguiente línea:

Código:
System.IO.File.Copy(ruta_principal, ruta_dest, true);
El caso es que esos archivos pueden llegar a ser muy pesados, entonces el programa se 'congela' y ahí es cuando quiero poner la barra de progreso, para que no se congele y se ejecute la barra, hasta que se acabe de copiar el archivo.

¿Cómo se puede hacer esto?
  #2 (permalink)  
Antiguo 19/09/2015, 05:24
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: [C#] Barra de progreso mientras hago una acción que puede tardar

La barra de progreso depende del UI Framework que estés usando.

Lo primordial acá es que para que no se te congele la UI tenés que ejecutar la copia fuera del UI thread:

Código C#:
Ver original
  1. await Task.Run(() => File.Copy(ruta_principal, ruta_dest, true));

Otra cosa: File.Copy() no reporta progreso, así que no vas a poder mostrar cuántos bytes se copiaron, como hace el diálogo de Windows.
  #3 (permalink)  
Antiguo 20/09/2015, 07:28
 
Fecha de Ingreso: julio-2011
Mensajes: 76
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: [C#] Barra de progreso mientras hago una acción que puede tardar

No sé muy bien a qué te refieres con:

Cita:
Lo primordial acá es que para que no se te congele la UI tenés que ejecutar la copia fuera del UI thread:
Yo lo tengo puesto dentro del evento del clic de un botón. ¿Donde tendría que ponerlo para que no se congele con archivos grandes?
  #4 (permalink)  
Antiguo 21/09/2015, 13:24
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: [C#] Barra de progreso mientras hago una acción que puede tardar

Tendrías que leer sobre Threading primero. La idea es que cualquier operación que hagas que no esté relacionada a la UI, debería ejecutarse en un thread aparte. No se trata de "donde" escribas el codigo sino "como". El ejemplo que te puse arriba utiliza la TPL de .Net y la keyword await de C# para disparar la operacion de manera asincronica (es decir, fuera del thread actual).

Etiquetas: barra, mientras, progreso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:35.