Как проверить завершение 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