2017-07-07 15 views
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は決して発動しません(使用されている以外のイベントは発生しません)。

取得したデータにアクセスするにはどうすればよいですか?

答えて

2

OpenReadCompletedイベントと組み合わせてOpenReadAsyncを使用してください。

Private Sub c_OpenReadCompleted(sender As Object, e As OpenReadCompletedEventArgs) Handles c.OpenReadCompleted 
    Dim stream = e.Result 
End Sub 
+0

「OpenReadCompleted」が発生します。私はイベントで何をすべきかわからない。このイベントは独自のスレッドで実行する必要があるため、バイト単位ですべての処理を実行することは賢明ではありませんが、より広い範囲の変数を操作するときに問題になる可能性があります。 - ただし、ReadByteではなくReadを使用してクラス全体でデータを格納すると、イベントを残しても動作しないように見えます。イベントは次のストリーム部分を提供するために再び発生しません。 - 私は単にその概念を理解していないと思う。 – Herb

+0

このイベントは、WebClientがリモートサーバーに接続したらストリームを提供します。そこから読むのはあなた次第です。通常、チャンクをバッファに読み込み、それを処理して次のチャンクで処理します。しかし、私はあなたがデータで何をしたいのか分かりません。 – Magnus

+0

@Herb:ストリームは、非同期の読み込み/書き込みもサポートしています。 –

関連する問題