Czy zauważyliście kiedyś nad startową procedurą aplikacji (main) atrybuty: [STAThread] i [MTAThread]? Od nich zależy w jakim trybie będzie działał wątek główny aplikacji: Single Threaded Apartment, czy Multi Threaded Apartment? Nie chciałbym tutaj wchodzić w teoretyczne szczegóły, ale zobaczcie jaki ciekawy błąd można uzyskać wykorzystując tryb MTA i kontrolkę System.Windows.Forms.WebBrowser:
System.Threading.ThreadStateException was unhandled Message="ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment."
Jak temu zaradzić? ano trzeba zmienić tryb tego wątku, który wyświetla WebBrowser na STA i wtedy powinno już wszystko działać.
Aby lepiej to objaśnić zaprezentuje kod, który zakłada istnienie funkcji ShowAboutDialog, która wyświetla okienko "About" zawierające kontrolkę WebBrowser:
//About box contains web browser controll that must be run in STA!! System.Threading.Thread th = new System.Threading.Thread( new System.Threading.ThreadStart( ShowAboutDialog ) ); th.SetApartmentState( System.Threading.ApartmentState.STA ); th.Start();
Podoba mi się ten wpis
OdpowiedzUsuńSuper wpis
OdpowiedzUsuń