2012-10-05 13 views
6

Ich habe den folgenden Code in C#:Wie behebe ich den Fehler: "Für den aktuellen Thread muss Apartmentstatus auf ApartmentState.sta gesetzt sein, damit Internet Explorer gestartet werden kann"?

namespace Tests 
{  
    [SetUpFixture, RequiresSTA] 
    public class Setup 
    { 
     public IE Window = new IE("webpage"); 

     [SetUp] 
     public void SetUp() 
     { 

     } 

     [TearDown] 
     public void TearDown() 
     { 

     } 
    } 
} 

Wenn ich versuche, es mit meiner Website laufen sie den Fehler zurückgibt:

"The currentthread needs to have its apartmentstate set to ApartmentState.sta to be able to initiate Internet Explorer"

Normalerweise, wenn irgendetwas außer SetupFixture verwenden, es RequiresSTA die Lösung. Aber aus irgendeinem Grund funktioniert es jetzt nicht.

Antwort

10

Die Lösung acctually endete ist ziemlich einfach, wenn Sie die Zeile einschließen:

[assembly: RequiresSTA] 

oben auf Ihrer Seite wird die gesamte Baugruppe für die Verwendung von STA eingerichtet und der Fehler wird nicht mehr ausgegeben.

5

Sie können versuchen, einen neuen Thread starten und setzen Sie den Apartment:

var t = new Thread(new ThreadStart(ToDo)); 
t.SetApartmentState(ApartmentState.STA); 
t.Start(); 
// Run synchronously by waiting for t to finish. 
t.Join(); 

und der Delegierte:

private void ToDo() 
{ 
    // Do something... 
} 

oder Inline-Version:

var t = new Thread(() => 
{ 
    // Do something... 
});