tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルIE_DocumentComplete イベント内で書き込みができない
記事No7817
投稿日: 2008/07/15(Tue) 11:23
投稿者花ちゃん
VB2005 IE 7.0 Windows Vista(VB2005 IE 6.0 WindowsXP) 環境で IE の
IE_DocumentComplete イベント内で TextBox 等のコントロールへ書き込み時
'System.InvalidOperationException' の初回例外が発生し、書き込みができません。

下記コードで再現できます。
'プロジェクト→参照の追加→COM→Microsoft Internet controls   を参照設定して下さい。
Public Class Form1
Private WithEvents IE As SHDocVw.InternetExplorer
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   If Not (IE Is Nothing) Then
      IE.Quit()
      IE = Nothing
   End If

   IE = New SHDocVw.InternetExplorer
   IE.Visible = True
   IE.Navigate2("http://hanatyan.sakura.ne.jp/top.htm")
End Sub

Private Sub IE_DocumentComplete(ByVal pDisp As Object, _
                                ByRef URL As Object) Handles IE.DocumentComplete
   If Not TypeName(pDisp) = "IWebBrowser2" Then
      Exit Sub
   End If
   Debug.WriteLine(URL.ToString)

   '下記はエラーが発生する
   'System.InvalidOperationException' の初回例外が System.Windows.Forms.dll で発生しました。
   '同様に、RichTextBox1.Text = URL.ToString でもエラーが発生して書き込みできない。
   Me.Text = URL.ToString
End Sub
End Class

どなたか、解決策をご存知でしたら、教えて頂けないでしょうか?

[ツリー表示へ]
タイトルRe: IE_DocumentComplete イベント内で書き込みができない
記事No7819
投稿日: 2008/07/15(Tue) 12:49
投稿者魔界の仮面弁士
エラーの原因は、スレッドが異なるからでしょう。
Invoke メソッドでの呼び出しに切り替えてみてください。


Private Sub IE_DocumentComplete(ByVal pDisp As Object, ByRef URL As Object) Handles IE.DocumentComplete
  If Not TypeName(pDisp) = "IWebBrowser2" Then Return
  Invoke(New SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(AddressOf foo), pDisp, URL)
End Sub

Private Sub foo(ByVal pDisp As Object, ByRef URL As Object)
  Me.Text = CStr(URL)
End Sub

[ツリー表示へ]
タイトルRe^2: IE_DocumentComplete イベント内で書き込みができない
記事No7820
投稿日: 2008/07/15(Tue) 13:37
投稿者花ちゃん
ありがとうございました。
お陰様でうまく行きました。

# VB6.0 や VB2005のWebBrowser では、問題なかったので、色々調べはしたのですが...。

[ツリー表示へ]