Как добавить полосу прогресса ProgressBar?

263
18 июня 2017, 14:59

Внутри string[] FileNames файлы для архивации. К ним можно как-то счётчик приделать.

        var cmpr = new SevenZipCompressor();
        cmpr.CompressionLevel = CompressionLevel.Fast;
        //cmpr.ArchiveFormat = OutArchiveFormat.SevenZip;
        if (File.Exists(FullNameArchive) == true)
        {
            cmpr.CompressionMode = CompressionMode.Append;
        }
        else { cmpr.CompressionMode = CompressionMode.Create; }
        //cmpr.CompressDirectory(@"путь\к\пакуемой\папке", @"имя\архива");
        cmpr.CompressFiles(FullNameArchive, FileNames);

.

<ProgressBar Height="20" VerticalAlignment="Top"/>
Answer 1

Официальный пример кода можно подсмотреть на CodePlex. Поскольку CodePlex скоро закрывается, вот выжимка:

// модель
double progress;
double Progress
{
    get => progress;
    set
    {
        if (progress != value)
        {
            progress = value;
            // отправляете нотификацию об изменении прогресса
        }
    }
}
Progress = 0;
cmpr.Compressing += OnCompressingProgress;
cmpr.CompressionFinished += OnCompressionFinished;
cmpr.BeginCompressFiles(...); // асинхронная операция
void OnCompressingProgress(object sender, ProgressEventArgs e) =>
    Progress += e.PercentDelta / 100.0;
void OnCompressionFinished(object sender, EventArgs e)
{
    Progress = 1.0;
    var cmpr = (SevenZipCompressor)sender;
    cmpr.Compressing -= OnCompressingProgress;
    cmpr.CompressionFinished -= OnCompressionFinished;
}

На VM-уровне вам надо подписаться на нотификации от модели, возможно, смаршаллировать их в UI-поток, и обновлять INPC-свойство CompressionProgress. (Это другое свойство, не то, которое в модели!)

На уровне View вы просто привязываетесь к свойству CompressionProgress из VM:

<ProgressBar Value="{Binding CompressionProgress}" Minimum="0" Maximum="1"/>

Как бы всё.

READ ALSO
WebDriver firefox нажать на checkbox c#

WebDriver firefox нажать на checkbox c#

Добрый день, нужно кликнуть по checkbox, сам checkbox имеет такой код

249
File.Copy vs Stream.CopyToAsync

File.Copy vs Stream.CopyToAsync

Подскажите пожалуйста, что более правильно использовать для копирования файла в полностью асинхронной службе WCF?

333
Транслятор с С# кода в код ассемблера х86 [требует правки]

Транслятор с С# кода в код ассемблера х86 [требует правки]

В универе поставили задачу написать транслятор с С# языка на язык ассемблера(x86)Честно говоря ниразу в жизни даже не трогал ассемблер, а уже...

247
Поиск по стороннему сайту на C#

Поиск по стороннему сайту на C#

Реально ли организовать поиск по стороннему, не своему, сайту по ключевым словам? Нужно искать соответствующие страницы, дальнейший парсинг...

230