タイトル : Re^6: Webbrowser.Documentから... 投稿日 : 2005/10/20(Thu) 11:53 投稿者 : 魔界の仮面弁士
> P.S.コードに(開放忘れ等の)間違いや, DomDocument は、unmanaged な COM インターフェイスを返すようなので、 おそらくは、Marshal.ReleaseComObject が必要になるかと思います。 ただ、手元に .NET 2.0 の環境が無いのでチェックはできません。m(_ _)m .NET 1.1 時代の知識を基にした机上デバッグなので、 あまり保証はできませんが、それでもよければ、多分―― Imports System.Runtime.InteropServices > Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, _ > ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _ > Handles WebBrowser1.DocumentCompleted '> Dim myDoc As HTMLDocument = Me.WebBrowser1.Document.DomDocument Dim myDoc As HTMLDocument Try myDoc = Me.WebBrowser1.Document.DomDocument Try Dim body As IHTMLDOMNode = myDoc.body > PrintNodeTree(body) Finally If Not body Is Nothing AndAlso Marshal.IsComObject(body) Then Marshal.ReleaseComObject(body) End If End Try > myDoc.close() Finally If Not myDoc Is Nothing AndAlso Marshal.IsComObject(myDoc) Then Marshal.ReleaseComObject(myDoc) End If End Try > End Sub > > Private Sub PrintNodeTree(ByVal Node As IHTMLDOMNode) Dim childNodes As Object Try childNodes = Node.childNodes '> For Each cNode As IHTMLDOMNode In Node.childNodes For Each cNode As IHTMLDOMNode In childNodes > Debug.Print(Space(Idt) & "<" & cNode.nodeName & ">") > If Not cNode.nodeValue Is DBNull.Value Then > Debug.Print(Space(Idt) & cNode.nodeValue) > End If > If cNode.hasChildNodes Then > Idt += 4 > PrintNodeTree(cNode) > End If '---> 一応書いてみましたが、この部分の必要性は不明……。 If Not cNode Is Nothing AndAlso Marshal.IsComObject(cNode) Then Marshal.ReleaseComObject(cNode) End If '<--- > Next Finally If Not childNodes Is Nothing AndAlso Marshal.IsComObject(childNodes) Then Marshal.ReleaseComObject(childNodes) End If End Try > Idt -= 4 > End Sub > End Class ――のような感じになるのでは、と予想しています。 # For Each 中での解放処理が必要かどうかを調べたのですが、わかりませんでした。 # もしかしたら不要かもしれませんし、あるいは IEnumerator の方を解放する必要が # あるのかも知れませんが、現時点ではわかりません。m(_ _)m # hhttp://www.divakk.co.jp/aoyagi/csharp_tips_vssenum.html |