Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何检查Shell32.Folder.CopyHere()何时完成_Vb.net_Asynchronous_Zip_Shell32 - Fatal编程技术网

Vb.net 如何检查Shell32.Folder.CopyHere()何时完成

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

我需要使用Shell32解压我的应用程序中的一些文件。现在,我使用
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。