Member 14150533 Ответов: 2

Как я могу использовать progressbar в своей форме?


Привет, я получил форму распаковки zip-файла с помощью windows form C# & я бы очень хотел добавить к нему ProgressBar, но, к сожалению, я понятия не имею, как написать код, который соединяет ProgressBar с моим кодом распаковки, чтобы показать прогресс. Я использую текстовое поле с именем txtsource, чтобы показать путь к нужному файлу, кнопку btnbrowse, чтобы выбрать нужный файл, и еще одну кнопку btnextract, чтобы начать процесс декомпрессии.
вот мои коды:

использование системы.ИО;
использование System.IO.Compression;

частная btnsource_Click недействительным(объект отправителя, EventArgs в электронной)
{
DialogResult result = openFileDialog1.Метод showdialog();
if (result == DialogResult.ОК)
{
txtsource.Text = openFileDialog1.имя файла;
}
}



частная btnextract_Click недействительным(объект отправителя, EventArgs в электронной)
{
txtsource.Text = openFileDialog1.имя файла;

DialogResult result2 = folderBrowserDialog1.Метод showdialog();
if (result2 == DialogResult.ОК)
{
System.IO.Compression.Zip-файл.ExtractToDirectory(openFileDialog1.Имя файла, folderBrowserDialog1.SelectedPath);
Ящик для сообщений.Show("Zip-пакет был извлечен в\n" + txtsource.Текст: "процесс извлечения пакета успешно завершен!", кнопки MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);

}
}

Что я уже пробовал:

Ну, Франкли, я действительно мало знаю о ProgressBar, и до сих пор статьи, которые я читал, чтобы исправить свои проблемы, не были полезны, и я должен сказать, что я программист-новичок, поэтому я был бы очень признателен вам за помощь. Спасибо.

2 Ответов

Рейтинг:
1

OriginalGriff

Делать это с подлинным индикатором прогресса будет немного сложно, как показано на рисунке: c# - извлечение архива с индикатором выполнения? - переполнение стека[^]
Первое, что нужно сделать, это переместить фактическую работу из потока пользовательского интерфейса в другой поток - a BackgroundWorker[^] прост в использовании - затем используйте код, приведенный в ссылке SO, чтобы предоставить показания прогресса с помощью метода worker ReportProgress обратно в обработчик событий потока пользовательского интерфейса, который обновляет индикатор выполнения.


Рейтинг:
1

Dave Kreskowiak

Другая проблема с тем, что вы делаете, - это ZipFile.ExtractToDirectory выполняет всю работу и сам не сообщает о прогрессе, поэтому ваш индикатор выполнения будет идти от 0 до 100 без какого-либо промежуточного шага.

Единственный способ показать прогресс-это распаковать весь список файлов, по одному за раз. Затем вы можете сообщить о том, как далеко вы продвинулись по списку.

Однако вы можете изменить индикатор выполнения на тип шатра, так что вы получите постоянно меняющееся изображение бара, чтобы показать, что что-то происходит. Вы просто не можете показать, как далеко зашел процесс распаковки.


[no name]

Я вижу, как Зипфайл.ExtractToDirectory не сообщает о прогрессе сам по себе, не могли бы вы предложить мне альтернативу для распаковки?

Dave Kreskowiak

Я не знаю ни одной библиотеки, которая будет сообщать о прогрессе. Если вам нужен индикатор выполнения с декомпрессией, вам придется написать свой собственный код для обработки декомпрессии.