Элементы управления Webbrowser в отдельных потоках
Привет,
Я работаю над проектом, в котором несколько веб-браузеров создаются в отдельных классах, и в них запускается новый поток, который выполняет некоторую навигацию с помощью веб-браузера и сообщает о результатах, устанавливая подэлементы ListViewItem, переданные классу.
Мне нужно создать новый веб-браузер несколько раз, и каждый из них будет работать в другом потоке пользовательского интерфейса, чтобы избежать замораживания пользовательского интерфейса. Если я не установлю режим квартиры потока в STA, я получу ошибку:
System.Threading.ThreadStateException: 'ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.'
Если я это сделаю, то все равно не смогу получить доступ к элементам пользовательского интерфейса из этого потока, даже с помощью методов делегирования, таких как;
Private main As Main Private item As ListViewItem Public Sub New(main As Main, ByRef item As ListViewItem, ip As String, set_provisioning_string As Boolean) Me.main = main Me.item = item Dim t As New Threading.Thread(AddressOf go) t.Start(New Object() {ip, set_provisioning_string}) End Sub Private Sub go(o As Object)...
Main.set_subitem_text(item, 4, "Checking something...")...
Private Delegate Sub set_subitem_text_delegate(ByRef item As ListViewItem, index As Integer, text As String) Public Sub set_subitem_text(ByRef item As ListViewItem, index As Integer, text As String) If InvokeRequired Then Invoke(New set_subitem_text_delegate(AddressOf set_subitem_text), item, index, text) Else item.SubItems(index).Text = text End If End Sub
Итак, есть ли способ создать поток с выделенным веб-браузером, где этот поток может получить доступ к элементам пользовательского интерфейса?
Что я уже пробовал:
ApartmentMode ста
Не ста
Использование делегатов
Не используя делегатов
Dave Kreskowiak
Windows Forms или WPF?
[no name]
Windows Forms