残念ながら、2番目のスレッドからコントロールを呼び出す必要があるWindowsフォームアプリケーションがあります。私はhttp://msdn.microsoft.com/en-us/library/ms171728.aspxに記載されているスレッドセーフなパターンを使用しています。これは過去に素晴らしい仕事をしています。VB.NET 2.0 - Windowsフォームコントロールへのスレッドセーフ呼び出しを使用するとStackOverflowExceptionが発生する
WebBrowserコントロールがあり、このスレッドセーフなパターンを使用してWebBrowser.Navigate()メソッドを呼び出そうとしていて、結果としてStackOverflow例外が発生しています。ここに私が書いたスレッドセーフなナビゲートメソッドがあります。
Private Delegate Sub NavigateControlCallback(ByRef wb As WebBrowser, ByVal url As String)
Private Sub AsyncNavigate(ByRef wb As WebBrowser, ByVal URL As String)
Try
If wb.InvokeRequired Then
Dim callback As New NavigateControlCallback(AddressOf AsyncNavigate)
callback(wb, url)
Else
wb.Navigate(url)
End If
Catch ex As Exception
End Try
End Sub
これらのStackOverflowExceptionsの副作用なしにWinFormsコンポーネントとやり取りするスレッドセーフな方法はありますか?
まあを。私はこれについてさらに研究をするつもりです。ありがとう、トン。 – LamdaComplex
@ LamdaComplex: 'wb.Navigate'呼び出し自体にブレークポイントを設定しようとしましたか?コールバックが起こるまでバックグラウンドスレッドを待たせたいなら、 'BeginInvoke'の代わりに' Invoke'を使うべきです。 –
@LamdaComplex 'しかし、現在ナビゲートは決して実際には起こりません。これは例外であり、あなたはただ無視しているだけです。 –