0
(これはthis oneへのフォローアップの質問です)WebClient.DownloadDataAsyncで取得したデータにアクセスする方法?
無限のオーディオストリームを非同期的に読み込み、得られたデータに対してJIT解析を実行したいと考えています。
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.
...
:
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
イベントの出力ごととして即時ウィンドウに、流れているようだ:WebClient
オブジェクトのDownloadDataAsync
メソッドを使用すると、私は勝つフォームプロジェクト以下、簡単にダウンロードを開始見ることができます
しかし、私はの方法を見つけることができません得られたデータ。これは無限のストリームなので、DownloadDataCompleted
は決して発動しません(使用されている以外のイベントは発生しません)。
取得したデータにアクセスするにはどうすればよいですか?
「OpenReadCompleted」が発生します。私はイベントで何をすべきかわからない。このイベントは独自のスレッドで実行する必要があるため、バイト単位ですべての処理を実行することは賢明ではありませんが、より広い範囲の変数を操作するときに問題になる可能性があります。 - ただし、ReadByteではなくReadを使用してクラス全体でデータを格納すると、イベントを残しても動作しないように見えます。イベントは次のストリーム部分を提供するために再び発生しません。 - 私は単にその概念を理解していないと思う。 – Herb
このイベントは、WebClientがリモートサーバーに接続したらストリームを提供します。そこから読むのはあなた次第です。通常、チャンクをバッファに読み込み、それを処理して次のチャンクで処理します。しかし、私はあなたがデータで何をしたいのか分かりません。 – Magnus
@Herb:ストリームは、非同期の読み込み/書き込みもサポートしています。 –