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
リンクありがとうございます。 – Gulbahar