2011-08-09 8 views
0

これは初心者の質問です。同じループでファイルを読み込み+ウェブページをダウンロードしますか?

ループでは、テキストファイルからURLのリストを読み取り、Webページをダウンロードし、正規表現を使用してテキストの一部を検索する必要があります。

私はUIの凍結を避けるために)DownloadStringAsync(と、次のコードを使用しますが、それは誤りトリガー "WebClientの同時I/O操作をサポートしていません。":

Private Sub AlertStringDownloaded(ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs) 
    If e.Cancelled = False AndAlso e.Error Is Nothing Then 
     Dim Content As String 
     Content = CStr(e.Result) 

     'Here, use regex to extract token 
    End If 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    'Read URLs from txt file 
    Dim FILE_NAME As String = "sites.txt" 

    Dim webClient As New WebClient 
    webClient.Encoding = System.Text.Encoding.UTF8 
    AddHandler webClient.DownloadStringCompleted, AddressOf AlertStringDownloaded 

    If System.IO.File.Exists(FILE_NAME) = True Then 
     Dim objReader As New System.IO.StreamReader(FILE_NAME) 

     Do While objReader.Peek() <> -1 
      Line = objReader.ReadLine 

      '"WebClient does not support concurrent I/O operations." 
      webClient.DownloadStringAsync(New Uri(Line)) 

      'Go to AlertStringDownloaded 
     Loop 
    Else 
     MsgBox("File Does Not Exist") 
    End If 

End Sub 

誰かがANを知っています代替?

ありがとうございます。


編集:明らかに、解決策は、現在のページがダウンロードされるまでアプリケーションを強制的に一時停止することです。 DoEventsを使用するよりも良い方法はありますか?

Dim Busy As Boolean = False 

Private Sub AlertStringDownloaded(ByVal sender As Object, ByVal e As DownloadStringCompletedEventArgs) 
    If e.Cancelled = False AndAlso e.Error Is Nothing Then 
     ... 
     Busy = False 
    End If 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    ... 
    If System.IO.File.Exists(FILE_NAME) = True Then 
     Dim objReader As New System.IO.StreamReader(FILE_NAME) 

     Do While objReader.Peek() <> -1 
      ... 
      '"WebClient does not support concurrent I/O operations." 
      Busy = True 
      webClient.DownloadStringAsync(New Uri(Line)) 
      'Better way to pause until done downloading current page? 
      Do While Busy 
       System.Windows.Forms.Application.DoEvents() 
      Loop 
     Loop 
    Else 
    MsgBox("File Does Not Exist") 
    End If 
End Sub 

答えて

関連する問題