2016-02-13 4 views
0

В настоящее время я занят небольшим приложением C#, которое читает папку, а затем динамически перечисляет все файлы .rar в виде окна с динамическим индикатором выполнения рядом с каждым файлом .rar. Таким образом, в основном с нажатием кнопки файлы .rar необходимо распаковать (командную строку Winrar), показывая прогресс для каждого процесса.Progress Bar для каждого процесса

Ниже мой процесс фрагмент

Process proc = new Process(); 
proc.StartInfo.FileName = @"unrar.exe"; 
proc.StartInfo.Arguments = FileName + "whatever attributes/switches"; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.RedirectStandardInput = true; 
proc.StartInfo.RedirectStandardError = true; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = true; 
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived); 
proc.Start(); 
proc.BeginOutputReadLine(); 
proc.WaitForExit(); 

удается получить это право.

Справка будет очень признательна.

+0

В чем проблема? – cubrr

+0

Что делает двоичный вывод 'unrar.exe'? Это, очевидно, имеет отношение к определению прогресса завершения ... –

+0

Я не могу заставить индикаторы выполнения работать вместе с процессами. Если у меня есть, например, 5 файлов rar, мне нужно запустить первый процесс с его индикатором выполнения, после завершения, перейти ко второму процессу и т. Д. В настоящее время все процессы обрабатываются/завершаются, а затем отображаются все индикаторы выполнения сразу , –

ответ

1

Если unrar.exe выводит ход на стандартный вывод, вы можете попробовать и проанализировать его, чтобы обновить панель прогресса.

Вместо использования unrar.exe для распаковки архивов из вашей программы вы можете попробовать использовать библиотеку, например SevenZipLib http://sevenziplib.codeplex.com/.

1

Проблема может заключаться в том, что UNRAR не выводит NewLine и просто продолжает писать в одну строку, поэтому обработчик события никогда не вызывается. Он вызывается только после написания новой строки.

Я бы пошел с решением Саймона и попробовал вместо этого использовать 7zip. Он более дружелюбен, имеет отличную библиотеку C# и работает практически со всеми форматами.