首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DotNetZIp阻塞单元

DotNetZIp阻塞单元
EN

Stack Overflow用户
提问于 2017-04-09 10:36:25
回答 1查看 827关注 0票数 0

我使用Ionic.Zip.dll从统一中提取压缩文件。

它可以很好地应用于zip.ExtractAll(zipPath, ExtractExistingFileAction.OverwriteSilently);

但是,在提取存档时,UI挂起(按钮效果等)。所以我试着在一个协同线内使用这个,但是没有得到结果,我认为这是错误的。

你已经用这种方式提取了什么东西吗?

编辑:

由于团结限制,我在跟踪线程函数的完成时遇到了问题。最后,用一个嘘声和一个协同线做了这件事:

代码语言:javascript
复制
   public bool extractionDone = false;
   IEnumerator CheckLauncherExtracted() {
       while(!extractionDone) yield return null;
       Debug.Log("ExtractionDone done !");
       OnLauncherFilesExtracted();
   }
    public void Extraction(){
        StartCoroutine("CheckLauncherExtracted");
        ThreadPool.QueueUserWorkItem(x => {
            FileManager.ExtractZipToDirectory(zipPath, zipExtractPath);
            extractionDone = true;
        });
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-09 19:12:19

如果zip.ExtractAll阻塞主Thread或导致打嗝,请在新的ThreadThreadPool中使用它。任何这些都能解决你的问题。在这种情况下,coroutine不会对您有所帮助,除非您正在使用的压缩API是专门设计用于使用Unity的。

ThreadPool修复这个问题

代码语言:javascript
复制
void Start()
{
    ThreadPool.QueueUserWorkItem(new WaitCallback(ExtractFile));
}

private void ExtractFile(object a)
{
    zip.ExtractAll(zipPath, ExtractExistingFileAction.OverwriteSilently);
}

请注意,您不能从另一个线程调用Unity的函数。例如,上面的ExtractFile函数是在另一个Thread中调用的,如果您试图在该函数中使用Unity,您将得到一个异常。有关如何在另一个here中使用Unity,请参见here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43305722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档