Copiando archivos de un directorio a otro con barra de progreso C# WPF
Estoy utilizando el código siguiente para copiar los archivos de un directorio a otro directorio.
private void CopiarArchivosRecursivamente(string directorioServidor, string directorioLocal)
{
directorioServidor = settings["baseDocPathSource"] as string;
directorioLocal = settings["baseDocPath"] as string;
//Ahora crea todos los directorios
foreach (string dirPath in Directory.GetDirectories(directorioServidor, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(directorioServidor, directorioLocal));
}
//Copia todos los archivos y reemplaza cualquier archivo con el mismo nombre
foreach (string newPath in Directory.GetFiles(directorioServidor, "*.*", SearchOption.AllDirectories))
{
File.Copy(newPath, newPath.Replace(directorioServidor, directorioLocal), true);
}
}
Quiero integrar una barra de progreso a mi código, es decir, cuando hago clic en el botón de copiar quiero mostrar una barra de progreso que se mueva de 0 a 100, y cuando se complete la copia de los archivos quiero ocultar la barra de progreso.
A continuación se muestra mi archivo XML
<Grid>
<ProgressBar Visibility="Hidden" Name="pbCopy" HorizontalAlignment="Left" Height="65" Margin="127,151,0,0" VerticalAlignment="Top" Width="485"/>
<Button Content="Copiar Archivos" HorizontalAlignment="Left" Margin="283,253,0,0" VerticalAlignment="Top" Width="164" Height="66"/>
</Grid>
Quiero ocultar la barra de progreso en mi formulario inicialmente y quiero establecer la visibilidad como “Visible” después de hacer clic en el botón.
davy.ai
Para integrar la barra de progreso con el proceso de copia de archivos, puedes usar el componente BackgroundWorker en tu código de C#. El componente BackgroundWorker te permite ejecutar una operación que consume mucho tiempo en un hilo de trabajo separado (no en el hilo de la interfaz de usuario) y reportar el progreso de vuelta al hilo de la interfaz de usuario.
Aquí tienes una versión actualizada de tu código con la barra de progreso integrada:
En el archivo XAML, puedes dejar el elemento ProgressBar tal como está, con la propiedad Visibility establecida en Hidden. Solo necesitas agregar un controlador de eventos Click al botón “Copy Files” de esta manera:
En el código detrás del formulario, puedes agregar el método manejador de eventos de esta manera:
Esto llamará al método CopyFilesRecursively cuando se haga clic en el botón “Copy Files”, lo cual iniciará la operación de copia de archivos en un hilo de trabajo separado y actualizará la barra de progreso en el hilo de la interfaz de usuario.