Вы можете использовать метод WebClient.DownloadFileTaskAsync для загрузки файлов растровых изображений (если вам необходимо хранить их и, в конечном итоге, загружать только обновления растровых изображений), а затем загрузить изображение из файла:
(чтобы использовать этот асинхронный метод, ваш код должен содержаться в async
обработчике метода / события)
Dim imageURL As String = "https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg"
Dim imageURI As Uri = New Uri(imageURL)
Dim bitmapFile As String = Path.Combine(Application.StartupPath, $"images\{imageURI.Segments.Last()}")
Using client As WebClient = New WebClient()
Await client.DownloadFileTaskAsync(imageURI, bitmapFile)
PictureBox1.Image?.Dispose()
PictureBox1.Load(bitmapFile)
End Using
Я предлагаю зарегистрировать имя файла растрового изображения в базе данных; только имя файла, а не полный путь: местоположение изображений должно быть определено, когда приложение загружает изображения в первый раз и может измениться (или пользователь может изменить его по любой причине). Если вам нужно переместить изображения, вам просто нужно обновить путь к хранилищу.
Эта информация также может храниться в базе данных.
Добавьте логическое поле, [Downloaded]
, чтобы установить значение True
, когда изображение загружено (для фильтрации записей, у которых еще нет связанного растрового изображения).
Если вы не хотите или не можете загрузить растровые изображения, вы можете использовать метод PictureBox.LoadAsync (или синхронный метод PictureBox.Load
), чтобы позволить элементу управления выполнить эту работу за вас:
Dim imageURL As String = "https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg"
PictureBox1.Image?.Dispose()
PictureBox1.LoadAsync(imageURL)
Или используйте метод WebClient.DownloadDataTaskAsync () , чтобы загрузить данные изображения в виде байтового массива и сгенерировать новое растровое изображение из MemoryStream. Растровое изображение не будет сохранено на диске:
Dim imageURL As String = "https://storage.googleapis.com/ygoprodeck.com/pics/27551.jpg"
Dim client As WebClient = New WebClient()
Dim ms As MemoryStream = New MemoryStream(
Await client.DownloadDataTaskAsync(New Uri(imageURL))
)
Using image As Image = Image.FromStream(ms)
PictureBox1.Image?.Dispose()
PictureBox1.Image = DirectCast(image.Clone(), Image)
End Using
ms.Dispose()
client.Dispose()