[英]Copying File with Progress Bar in C# WPF
I am using the below code for Copying the files from one location to another我正在使用以下代码将文件从一个位置复制到另一个位置
private void CopyFilesRecursivelyy(string serverDirectorty, string localDirectory)
{
foreach (string dirPath in Directory.GetDirectories(serverDirectorty, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(serverDirectorty, localDirectory));
}
string[] files = Directory.GetFiles(serverDirectorty, "*.*", SearchOption.AllDirectories);
for (int i = 0; i < files.Length; i++)
{
string newPath = files[i];
File.Copy(newPath, newPath.Replace(serverDirectorty, localDirectory), true);
}
}
Below is my XML code:下面是我的 XML 代码:
<ProgressBar Name ="pb" Grid.Column="2" HorizontalAlignment="Center" Height="16" Margin="0,0,0,0" VerticalAlignment="Center" Maximum="{Binding progressMax}" Value="{Binding intProgress}" Width="195" Visibility="{Binding visibilityPrgb}"/>
This is the code for Binding the Properties of Progress bar:这是绑定进度条属性的代码:
public int intProgress
{
get => _intProgress;
set
{
_intProgress = value;
OnPropertyChanged();
}
}
private int _intProgress;
public int progressMax
{
get => _progressMax;
set
{
_progressMax = value;
OnPropertyChanged();
}
}
private int _progressMax;
public bool visibilityPrgb
{
get => _visibilityPrgb;
set
{
_visibilityPrgb = value;
OnPropertyChanged();
}
}
private bool _visibilityPrgb;
Can anyone tell me how can I integrate this progress bar with my above code.谁能告诉我如何将此进度条与我的上述代码集成。 I want progress bar to run from 1-100 and after the completion of files copying I want to hidden the progress bar.
我希望进度条从1-100运行,并且在完成文件复制后我想隐藏进度条。
Set progressMax
to the number of files to be copied and then increase intProgress
for each copied file, eg:将
progressMax
设置为要复制的文件数,然后为每个复制的文件增加intProgress
,例如:
private void CopyFilesRecursivelyy(string serverDirectorty, string localDirectory)
{
foreach (string dirPath in Directory.GetDirectories(serverDirectorty, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(serverDirectorty, localDirectory));
}
string[] files = Directory.GetFiles(serverDirectorty, "*.*", SearchOption.AllDirectories);
progressMax = files.Length;
intProgress = 0;
visibilityPrgb = true;
for (int i = 0; i < files.Length; i++)
{
string newPath = files[i];
File.Copy(newPath, newPath.Replace(serverDirectorty, localDirectory), true);
intProgress++;
}
visibilityPrgb = false;
}
Also make sure that you are calling CopyFilesRecursivelyy
on a background thread and that you use a converter to convert the value of the visibilityPrgb
property to a Visibility
in your view:还要确保在后台线程上调用
CopyFilesRecursivelyy
并使用转换器将visibilityPrgb
属性的值转换为视图中的Visibility
:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
...
Visibility="{Binding visibilityPrgb, Converter={StaticResource BooleanToVisibilityConverter}}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.