Visual Basic .NET で 非同期で url から DOMドキュメントを取得するためにはどうしたら良いでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2006/09/07 09:01:21
  • 終了:2006/09/14 09:05:02

回答(2件)

id:KirakiraHikaru No.1

KirakiraHikaru回答回数354ベストアンサー獲得回数682006/09/07 17:04:55

ポイント35pt

.NET では非同期でXMLをLoadできるものがないようなので、

下記のようにスレッドを使用すると非同期で読み込めます。


非同期でXMLをLoadするクラスを作成(XmlDocumentを継承)

Imports System.Xml
Imports System.Threading

Public Class MyXmlDocument
    Inherits XmlDocument
    Private myThread As Threading.Thread
    Private url As String
    Public Event Loaded()

    'XMLロード処理(非同期)
    Public Sub LoadAsync(ByVal filename As String)
        'スレッド実行中チェック
        If IsNothing(myThread) = False Then
            Return
        End If
        'スレッド実行
        url = filename
        myThread = New Threading.Thread(AddressOf LoadAsyncThread)
        myThread.Name = "MyXmlDocumentThread"
        myThread.Start()
    End Sub

    'XMLロード処理(スレッド実行用)
    Private Sub LoadAsyncThread()
        MyBase.Load(url)
        'ロード完了イベント発行
        RaiseEvent Loaded()
        myThread = Nothing
    End Sub

End Class


上記クラスを利用して非同期でXMLをロード

    Private WithEvents myXml As MyXmlDocument = New MyXmlDocument

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            myXml.LoadAsync("http://q.hatena.ne.jp/list?mode=rss")
        Catch ex As Exception
            MessageBox.Show("Error:" & ex.Message)
        End Try
    End Sub

    Private Sub myXml_Loaded() Handles myXml.Loaded
        Console.WriteLine(myXml.OuterXml)
    End Sub

スレッドについては下記のページが解りやすいです。

http://www.atmarkit.co.jp/fdotnet/mthread/index/index.html

id:KirakiraHikaru No.2

KirakiraHikaru回答回数354ベストアンサー獲得回数682006/09/09 21:14:09

ポイント35pt

.NET では非同期でXMLをLoadできるものがないようなので、

下記のようにスレッドを使用すると非同期で読み込めます。


非同期でXMLをLoadするクラスを作成(XmlDocumentを継承)

Imports System.Xml
Imports System.Threading

Public Class MyXmlDocument
    Inherits XmlDocument
    Private myThread As Threading.Thread
    Private url As String
    Public Event Loaded()

    'XMLロード処理(非同期)
    Public Sub LoadAsync(ByVal filename As String)
        'スレッド実行中チェック
        If IsNothing(myThread) = False Then
            Return
        End If
        'スレッド実行
        url = filename
        myThread = New Threading.Thread(AddressOf LoadAsyncThread)
        myThread.Name = "MyXmlDocumentThread"
        myThread.Start()
    End Sub

    'XMLロード処理(スレッド実行用)
    Private Sub LoadAsyncThread()
        MyBase.Load(url)
        'ロード完了イベント発行
        RaiseEvent Loaded()
        myThread = Nothing
    End Sub

End Class


上記クラスを利用して非同期でXMLをロード

    Private WithEvents myXml As MyXmlDocument = New MyXmlDocument

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            myXml.LoadAsync("http://q.hatena.ne.jp/list?mode=rss")
        Catch ex As Exception
            MessageBox.Show("Error:" & ex.Message)
        End Try
    End Sub

    Private Sub myXml_Loaded() Handles myXml.Loaded
        Console.WriteLine(myXml.OuterXml)
    End Sub

スレッドについては下記のページが解りやすいです。

http://www.atmarkit.co.jp/fdotnet/mthread/index/index.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません