piątek, 11 września 2009

Problemy z STA i MTA [PL]

Promuj

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();
Promuj

2 komentarze:

Posty powiązane / Related posts