我的申请冻结/没有回应

时间:2015-10-04 22:16:00

标签: c#

我有这段代码:(我使用的是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),我的应用程序就不会冻结。

为什么会冻结?

1 个答案:

答案 0 :(得分:2)

  

当我点击一个按钮时,我的应用程序冻结了。我不知道为什么,但如果我没有调用ScanApplication(应用程序),我的应用程序就不会冻结。

虽然您发布的代码中没有显示,但您几乎可以肯定从按钮单击事件处理程序中提取ZIP文件。

事件处理程序在与UI相同的线程上运行。在忙于处理ZIP文件时,不能处理其他UI消息。因此,UI会冻结,直到ZIP处理完成。

您可以使用BackgroundWorker或线程或任务来执行ZIP,以便不阻止UI线程。