У меня есть рабочий код для чтения RSS-канала, который использует:
Dim doc As New XmlDocument
doc.Load("http://...")
Dim channel As XmlElement = doc("rss")("channel")
Dim items As XmlNodeList = channel.GetElementsByTagName("item")
К сожалению, вызов doc.Load приводит к тому, что остальная часть программы перестает отвечать на запросы до ее завершения.
Какой лучший способ выполнить загрузку асинхронно и иметь функцию обратного вызова для обработки данных?
Редактировать : Вот код, который я пытался использовать с помощью WebClient - метод Load
все еще отстает:
Private Sub checkResults()
'request rss feed
Dim w As New System.Net.WebClient
AddHandler w.OpenReadCompleted, AddressOf rssReadCallback
w.OpenReadAsync(New Uri("http://..."))
End Sub
Private Sub rssReadCallback(ByVal sender As Object, ByVal e As System.Net.OpenReadCompletedEventArgs)
Dim reply As Stream = Nothing
Try
reply = CType(e.Result, Stream)
Dim doc As New XmlDocument
doc.Load(reply) ' This line takes forever to complete
Dim channel As XmlElement = doc("rss")("channel")
Dim items As XmlNodeList = channel.GetElementsByTagName("item")
'...
Finally
If Not reply Is Nothing Then
reply.Close()
End If
End Try
Метод rssReadCallback выполняется довольно быстро после вызова checkResults, но затем пользовательский интерфейс останавливается во время метода Load
.