簡體   English   中英

在 C# WPF 中復制帶有進度條的文件

[英]Copying File with Progress Bar in C# WPF

我正在使用以下代碼將文件從一個位置復制到另一個位置

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);
          
        }
     
    }

下面是我的 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}"/>

這是綁定進度條屬性的代碼:

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;

誰能告訴我如何將此進度條與我的上述代碼集成 我希望進度條從1-100運行,並且在完成文件復制后我想隱藏進度條。

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;

}

還要確保在后台線程上調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM