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 originalawait 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.