Как проверить завершение Shell32.Folder.CopyHere()

Мне нужно распаковать некоторые файлы в моем приложении с помощью Shell32. Прямо сейчас я использую srcFolder.CopyHere(destFolder.Items()) для достижения этого. Однако для моей следующей строки кода требуется новый ZIP файл. Но поскольку метод CopyHere - Async, как я могу проверить, когда он закончил? Прямо сейчас я использую Thread.Sleep около 500 мс, которого для моего компьютера достаточно, чтобы закончить создание ZIP файла, но это не хороший код imo.

Любые идеи?

При необходимости может быть предоставлена ​​дополнительная информация/код.

Ответ 1

Я нашел его, использовал что-то вроде этого:

  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

Не совсем идеальный, но потеряет меньше времени, чем с моим первым подходом.

Ответ 2

Вот еще один для ожидания завершения копирования

'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