Как проверить, когда Shell32.Folder.CopyHere() закончен

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

Есть идеи?

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

2 ответа

Решение

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

  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
Другие вопросы по тегам