gpt4 book ai didi

c# - DotNetZip 卡住我的应用程序?

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:24 25 4
gpt4 key购买 nike

            string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);    
public void unzip(String zFile)
{
Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(zFile);
zip.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(zip_ExtractProgress);
zip.ExtractAll(desktop + "\\cache", ExtractExistingFileAction.OverwriteSilently);
zip.Dispose();
zip = null;
}

void zip_ExtractProgress(object sender, ExtractProgressEventArgs e)
{

if (e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten)
{
label2.Text = "debug: " + ((e.EntriesExtracted));
}
else if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry)
{
label3.Text = e.CurrentEntry.FileName;
}
}

private void button1_Click(object sender, EventArgs e)
{
unzip(desktop + "\\cache.zip");
}

当我执行 unzip button1_Click() 时,我的应用程序卡住了。我是 C# 的新手,我不太确定如何解决这个问题,有人可以帮助我吗?

最佳答案

长时间运行的阻塞操作不应在主 UI 线程上运行,因为如您所见,UI 会卡住。

考虑使用 BackgroundWorker在单独的线程上完成工作。

有一个很好的总结here .

通过处理 ProgressChanged 事件并调用 backgroundWorker.ReportProgress() 向 UI 报告进度,而不是直接从内部更新 label2.Text。

即从你的 zip_ExtractProgress 方法中调用 backgroundWorker.ReportProgress

关于c# - DotNetZip 卡住我的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com