VB.net DownloadDataAsync в MemoryStream не работает - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть следующий код для загрузки изображения из Интернета прямо в мою папку с картинками (из памяти):

PictureBox1.Image = New Bitmap(New IO.MemoryStream(New Net.WebClient().DownloadData("LINK")))

Проблема в том, что мое приложение зависает во время загрузки WebClient, поэтому я подумалЯ бы использовал DownloadDataAsync

Однако использование этого кода вообще не работает:

PictureBox1.Image = New Bitmap(New IO.MemoryStream(New Net.WebClient().DownloadDataAsync(New Uri("LINK"))))

Возвращает ошибку «Выражение не дает значения»

1 Ответ

0 голосов
/ 23 февраля 2019

Как говорится в сообщении об ошибке, вы не можете просто передать DownloadDataAsync как параметр MemoryStream, поскольку DownloadDataAsync является Sub, тогда как DownloadData является функцией, возвращающей Bytes().

.чтобы использовать DownloadDataSync, посмотрите пример кода ниже:

Dim wc As New Net.WebClient()
AddHandler wc.DownloadDataCompleted, AddressOf DownloadDataCompleted
AddHandler wc.DownloadProgressChanged, AddressOf DownloadProgressChanged ' in case you want to monitor download progress

wc.DownloadDataAsync(New uri("link"))

Ниже приведены обработчики событий:

Sub DownloadDataCompleted(sender As Object, e As DownloadDataCompletedEventArgs)
    '  If the request was not canceled and did not throw
    '  an exception, display the resource.
    If e.Cancelled = False AndAlso e.Error Is Nothing Then

        PictureBox1.Image =  New Bitmap(New IO.MemoryStream(e.Result))
    End If
End Sub

Sub DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs)
    ' show progress using : 
    ' Percent = e.ProgressPercentage
    ' Text = $"{e.BytesReceived} of {e.TotalBytesToReceive}"
End Sub
...