0
我有一個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
是否存在線程安全的方式來與WinForms組件交互,而沒有這些StackOverflowExceptions的副作用?
嗯,這確實停止了StackOverflow的例外,但現在的導航從未實際發生。我會去做更多的研究。萬分感謝。 – LamdaComplex
@LamdaComplex:你有沒有嘗試在'wb.Navigate'調用本身上放置一個斷點,看看是否被調用?如果你希望後臺線程等待回調發生,當然你應該使用'Invoke'而不是'BeginInvoke'。 –
@LamdaComplex'但現在導航永遠不會發生,這是例外,你只是忽略它們。 –