0
(这是this one的后续问题。)如何访问通过WebClient.DownloadDataAsync获取的数据?
我想读取无尽的音频流异步,以便我可以对获得的数据进行JIT分析。使用WebClient
对象的DownloadDataAsync
方法,我可以很容易地开始下载,请参阅以下赢形式的项目:
Imports System.Net 'For WebClient
Public Class Form1
Private WithEvents c As New WebClient()
Protected Overrides Sub Finalize()
c.Dispose()
MyBase.Finalize()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim u As New Uri("http://flower.serverhostingcenter.com:8433/;")
c.DownloadDataAsync(u)
End Sub
Private Sub c_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles c.DownloadProgressChanged
Debug.Print(e.BytesReceived.ToString & " B received.")
End Sub
End Class
和流似乎流动,为每DownloadProgressChanged
事件的输出到即时窗口:
2920 B received.
48180 B received.
56940 B received.
61320 B received.
87600 B received.
94900 B received.
160436 B received.
162060 B received.
227596 B received.
...
但是,我缺少找到一种方法,也是读取获得的数据。由于这是一个层出不穷的流,DownloadDataCompleted
将永远不会开火(除了使用的其他事件外,也不会开火)。
如何访问获取的数据?
好吧,所以'OpenReadCompleted'会触发。我不确定接下来要做什么。所有处理过程中,读取字节的字节肯定不是明智的,因为这个事件应该在自己的线程中运行,因此当操纵更大范围的变量时可能遇到问题,不是吗? - 但是,使用Read而不是ReadByte并存储整个类的数据,然后离开事件似乎不起作用:事件不会再次触发以提供下一个流部分。 - 我想我根本不理解这个概念。 – Herb
WebClient连接到远程服务器后,此事件会为您提供流。它由你来读取。通常人们会将块读入缓冲区,处理该块并继续下一个块。但我不知道你想要怎么处理这些数据。 – Magnus
@ Herb:Streams支持异步读/写。 –