我使用Ionic.Zip.dll从统一中提取压缩文件。
它可以很好地应用于zip.ExtractAll(zipPath, ExtractExistingFileAction.OverwriteSilently);
但是,在提取存档时,UI挂起(按钮效果等)。所以我试着在一个协同线内使用这个,但是没有得到结果,我认为这是错误的。
你已经用这种方式提取了什么东西吗?
编辑:
由于团结限制,我在跟踪线程函数的完成时遇到了问题。最后,用一个嘘声和一个协同线做了这件事:
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;
});
}发布于 2017-04-09 19:12:19
如果zip.ExtractAll阻塞主Thread或导致打嗝,请在新的Thread或ThreadPool中使用它。任何这些都能解决你的问题。在这种情况下,coroutine不会对您有所帮助,除非您正在使用的压缩API是专门设计用于使用Unity的。
用ThreadPool修复这个问题
void Start()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ExtractFile));
}
private void ExtractFile(object a)
{
zip.ExtractAll(zipPath, ExtractExistingFileAction.OverwriteSilently);
}请注意,您不能从另一个线程调用Unity的函数。例如,上面的ExtractFile函数是在另一个Thread中调用的,如果您试图在该函数中使用Unity,您将得到一个异常。有关如何在另一个here中使用Unity,请参见here。
https://stackoverflow.com/questions/43305722
复制相似问题