我想添加process bar
压缩SevenZipSharp
文件/文件夹的时间。
我写了类似的东西:(查看评论)
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
...
...
...
和:Void
_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); }));
}
但是,正如您可能猜到的那样,它不起作用。
编辑:
好的,现在我添加了:
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 启动但程序冻结约 97%-98% 并且没有任何反应。我想我必须创造新的Thread
。有人可以帮我吗?