Jaco Hendriks
Jaco Hendriks

Reputation: 60

Progress Bar for each process

I'm currently busy with a small C# application that reads a folder then dynamically lists all .rar files on a windows form with a dynamic progress bar next to each .rar file. So basically with the press of a button, the .rar files needs to be unzipped (winrar command line) showing the progress for each process.

Below is my process snippet

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

Having trouble getting this right.

Help will be much appreciated.

Upvotes: 0

Views: 791

Answers (2)

Shiroy
Shiroy

Reputation: 1838

The problem may be that UNRAR doesn't output a NewLine, and just keeps writing to the same line, so the event handler never gets called. It only gets called once a new line is written.

I would go with Simon's solution and try to use 7zip instead. It's more friendly has a great C# library and works with almost all formats.

Upvotes: 1

Simon
Simon

Reputation: 151

If unrar.exe outputs the progress to the standard output, you could try and parse it to update the progressbar.

Instead of using unrar.exe to uncompress the archives from within your program, you could try using a library, like SevenZipLib http://sevenziplib.codeplex.com/.

Upvotes: 1

Related Questions