我有这段代码:(我使用的是DotNetZip库)
private void ExtractZip(string zipPath)
{
ZipFile zip = ZipFile.Read(zipPath);
string application = "test.exe";
zip.ExtractAll(Directory.GetCurrentDirectory(), ExtractExistingFileAction.OverwriteSilently);
ScanApplication(application);
}
private void ScanApplication(string application)
{
if (File.Exists(application))
{
Main mainApp = new Main();
mainApp.newVersion = FileVersionInfo.GetVersionInfo(application).FileVersion;
Form2 form2 = new Form2();
form2.ShowDialog();
this.Close();
}
}
当我点击一个按钮时,我的应用程序冻结了。我不知道为什么,但如果我没有打电话给ScanApplication(application)
,我的应用程序就不会冻结。
为什么会冻结?
答案 0 :(得分:2)
当我点击一个按钮时,我的应用程序冻结了。我不知道为什么,但如果我没有调用ScanApplication(应用程序),我的应用程序就不会冻结。
虽然您发布的代码中没有显示,但您几乎可以肯定从按钮单击事件处理程序中提取ZIP文件。
事件处理程序在与UI相同的线程上运行。在忙于处理ZIP文件时,不能处理其他UI消息。因此,UI会冻结,直到ZIP处理完成。
您可以使用BackgroundWorker或线程或任务来执行ZIP,以便不阻止UI线程。