Vb.net 如何检查Shell32.Folder.CopyHere()何时完成
我需要使用Shell32解压我的应用程序中的一些文件。现在,我使用Vb.net 如何检查Shell32.Folder.CopyHere()何时完成,vb.net,asynchronous,zip,shell32,Vb.net,Asynchronous,Zip,Shell32,我需要使用Shell32解压我的应用程序中的一些文件。现在,我使用srcFolder.CopyHere(destFolder.Items())来实现这一点。但是,我的下一行代码需要新生成的ZIP文件。但是由于CopyHere方法是异步的,我如何检查它何时完成?现在我使用一个线程.Sleep大约500毫秒,这足以让我的计算机完成ZIP文件的创建,但它不是很好的代码 有什么想法吗 如有必要,可以提供更多信息/代码。我找到了它,使用了如下内容: srcFolder.CopyHere(destFol
srcFolder.CopyHere(destFolder.Items())
来实现这一点。但是,我的下一行代码需要新生成的ZIP文件。但是由于CopyHere
方法是异步的,我如何检查它何时完成?现在我使用一个线程.Sleep
大约500毫秒,这足以让我的计算机完成ZIP文件的创建,但它不是很好的代码
有什么想法吗
如有必要,可以提供更多信息/代码。我找到了它,使用了如下内容:
srcFolder.CopyHere(destFolder.Items())
While FileInUse(FILEPATH & "BudgetJaarOverzichtSMB.zip")
Thread.Sleep(100)
End While
Private Function FileInUse(ByVal FilePath As String) As Boolean
Try
FileOpen(1, FilePath, OpenMode.Input)
FileClose(1)
Return False ' File not in use
Catch ex As Exception
Return True ' File in use
End Try
End Function
虽然不是很完美,但与我的第一种方法相比,会损失更少的时间。这里是另一种等待完成复制的方法
'Wait until the File/Folder has finished writing to zip file...
Do Until Shell.NameSpace(Filename).Items.Count = Shell.NameSpace(Input).Items.Count
System.Threading.Thread.Sleep(200)
System.Diagnostics.Debug.Print("Waiting...")
Loop
+我想找点什么,但什么都没找到。只是一张纸条。增加一些安全措施,以打破这种循环,如果你的副本需要太长时间。(例如,不可用的网络路径)此解决方案适用于Windows 8,但在Windows 7上会过早启动。有什么想法吗?使用Excel VBA,我们需要1。将文本文件复制到zip 2。获取zip的字节流以进行进一步处理。3.删除文本和zip文件。由于代码给了我们异常和不规则的错误(总是与文件路径/zip文件路径相关),我们将1和3的代码提取到另一个测试环境中,并多次重新运行它。在这里,我们实现了FileInUse解决方案,但不知何故,该函数不断返回false,并且根本不执行删除。Genius…,应该是最重要的答案。这种方法可能更有效,不阻塞内核调用。这非常好。但是,您可能需要调整文件夹中任何数量的预先存在的项目。这种方法有时仍然会抛出错误。我们已经在我们的项目中实现了这一点,但在我们的一台客户机中,这会引发错误70或错误75。