2012-10-05 11 views
6

Mam następujący kod w C#:Jak naprawić błąd: "Bieżący element musi mieć ustawiony apartamentstate na ApartmentState.sta, aby móc zainicjować Internet Explorera"?

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

     [SetUp] 
     public void SetUp() 
     { 

     } 

     [TearDown] 
     public void TearDown() 
     { 

     } 
    } 
} 

Gdy próbuję uruchomić go z mojej strony to zwraca błąd:

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

Normalnie przy użyciu niczego oprócz SetupFixture, RequiresSTA to rozwiązanie. Ale z jakiegoś powodu nie działa teraz.

Odpowiedz

10

Rozwiązanie acctually skończyło się będąc raczej prostym, jeśli podasz linię:

[assembly: RequiresSTA] 

u góry strony skonfiguruje cały zespół do używania STA i nie będzie już zgłaszał błędu.

5

Można spróbować rozpoczęciem nowego wątku i ustawić jej ApartmentState:

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

a Delegat:

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

Albo inline wersja:

var t = new Thread(() => 
{ 
    // Do something... 
}); 
Powiązane problemy