я это для/следующего цикла, когда я загрузить файл, а затем процесс и загрузить его contnets в базу данных:Как выполнить две задачи одновременно?
For Each f As WinSCP.RemoteFileInfo In remotefilesinf
If DownloadFile(FTPSession, CacheDirPath, "/mnt/usb", f) Then
LoadDB(System.IO.Path.Combine(CacheDirPath, f.Name))
Else
MsgBox("Download failed.")
End If
Next
Для того, чтобы ускорить процесс, как я могу сделать загрузку БД, а следующий файл загружается? Я не могу выполнить DBLoad до тех пор, пока загрузка каждого файла не будет завершена, и я могу выполнять только одну задачу DBLoad за разблокировку базы данных.
Я попытался использовать фоновый рабочий для задачи LoadDB, но событие RunWorkerCompleted не будет срабатывать, когда поток пользовательского интерфейса занят загрузкой, поэтому я не знаю, когда я могу сделать следующий DBload (DB не заблокирован).
Любые советы, оцененные.
Я пробовал что-то похожее.Таким образом, у меня был бы один рабочий стол, который загружает файл, а затем в RunWorkerComplete добавляет имя файла в список, а затем как снова запустить фонового рабочего, чтобы получить следующий файл? Аналогично, с bgw2, как мне заставить его ждать загрузки файла перед запуском задачи loadDB? – Guy
Нет, я думаю, вам нужно 2 рабочих, по одному для каждого файла, который выполняет загрузку и материал последовательно. Основной поток пользовательского интерфейса может сообщать о ходе обоих файлов. – ja72
Я бы не использовал событие ronworkercomplete для такого рода задач. Используйте обычный метод и просто переберитесь по всем файлам, добавив их в список. Когда закончится первый файл, запустите новый рабочий, который обрабатывает работу db. Вы можете использовать наблюдаемую коллекцию, которая запускает событие при изменении, поэтому работник знал, когда остановиться. Другой учил: используйте параллельный цикл и просто проверяйте db для блокировки, затем установите замок, некоторое время спать и повторите попытку. Это может быть что-то простое, как столбец, который содержит 1 при блокировке, 0, если нет. –