Mieszkanie jednorodzinne - nie można uruchomić ActiveX control
Muszę uzyskać informacje o zastosowanych stylach CSS na stronie HTML. Użyłem AxWebBrowser i iterate IHTMLDOMNode. Jestem w stanie uzyskać wszystkie potrzebne dane i przenieść kod do mojej aplikacji. Problem polega na tym, że ta część działa wewnątrz workera w tle i dostałem wyjątek podczas próby utworzenia instancji kontroli.
AxWebBrowser browser = new AxWebBrowser();
ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated
because the current thread is not in a single-threaded apartment.
Czy Jest jakiś sposób na rozwiązanie tej lub innej opcji niż AxWebBrowser?
3 answers
Problem polega na tym, że większość interfejsów API wątków / pracowników w tle utworzy wątek w wielowątkowym mieszkaniu. Komunikat o błędzie wskazuje, że sterowanie wymaga, aby gwint był pojedynczy gwintowany.
Możesz to obejść samodzielnie tworząc wątek i określając stan STA na wątku.
var t = new Thread(MyThreadStartMethod);
t.SetApartmentState(ApartmentState.STA);
t.Start();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 20:58:01
Śmiało i dodaj [STAThread] do głównego wpisu aplikacji, oznacza to, że model gwintowania COM jest jednowątkowym mieszkaniem (STA)
Przykład:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new WebBrowser());
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-21 17:37:58
Jeśli użyłeś [STAThread]
do głównego wpisu aplikacji i nadal masz błąd, może być konieczne wykonanie thread-Safe call do kontrolki... coś jak poniżej. W moim przypadku z tym samym problemem zadziałało następujące rozwiązanie!
Private void YourFunc(..)
{
if (this.InvokeRequired)
{
Invoke(new MethodInvoker(delegate()
{
// Call your method YourFunc(..);
}));
}
else
{
///
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-12 18:55:46