I want to add process bar
when SevenZipSharp
is compressing files/folders.
I wrote something like: (check out comments)
private void buttonCompress_Click(object sender, EventArgs e)
{
SevenZip.SevenZipCompressor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"SevenZipSharp.dll"));
if (IntPtr.Size == 8) //x64
SevenZip.SevenZipExtractor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"7z64.dll"));
else //x86
SevenZip.SevenZipExtractor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"7z.dll"));
compressor.Compressing += new EventHandler<ProgressEventArgs>(compressor_Compressing); // <-- Handler for progressBar
...
...
...
and Void
for progressBar
:
void compressor_Compressing(object sender, ProgressEventArgs e)
{
this.Invoke(new MethodInvoker(delegate { progressBar1.Value = e.PercentDone;}));
//i tired this too: this.Invoke(new MethodInvoker(delegate {compressor_Compressing(sender, e); }));
}
But, as you probably guessed, doesn't work.
Edit:
ok so now i added:
void compressor_Compressing(object sender, ProgressEventArgs e)
{
if(InvokeRequired) // <-- not necessary in this case
{
Thread.Sleep(10); //<-- this is the key to run progressBar
this.Invoke((new MethodInvoker(delegate { progressBar1.Value = e.PercentDone; })));
}
ProcessBar started BUT program frezzing about 97%-98% and nothing happens.
I think i must create new Thread
. Can someone help me with it please?