digitorum.ru

Как меня найти

Профиль

icq: 4415944

C# WebBrowser в отдельном потоке.

C#

Если просто попытаться создать новый поток с WebBrowser, то получим следующее сообщение:

Дополнительные сведения: Создание экземпляра элемента управления ActiveX '...' невозможно: текущий поток не находится в однопоточном контейнере.

 

Решается очень просто

Thread ThA = new Thread(
	() => {
		LoginForm LoginFormInstance = new LoginForm();
		LoginFormInstance.Show();
		LoginFormInstance.Browser.Navigate(this.GetLoginUri());
		Application.Run();
	}
);
ThA.SetApartmentState(ApartmentState.STA);
ThA.Start();
// ждем завершения потока
ThA.Join();

 

ApartmentState.STA - The Thread will create and enter a single-threaded apartment. ("Объект Thread создаст однопоточный апартамент и войдет в него." - согласно русскому мсдн. Звучит коряво, но смысл в целом понятен xD).