Как проверить, когда 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