如何修复错误:“当前线程需要将其公寓状态设置为ApartmentState.sta才能启动Internet Explorer”?

时间:2012-10-05 20:40:39

标签: c# nunit watin

我在C#中有以下代码:

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

        [SetUp]
        public void SetUp()
        {

        }

        [TearDown]
        public void TearDown()
        {

        } 
    }
}

当我尝试使用我的网站运行它时,它会返回错误:

  

“当前线程需要将其公寓状态设置为   ApartmentState.sta能够启动Internet Explorer“

通常在使用除SetupFixture之外的任何东西时,需要将其作为解决方案。但由于某种原因,它现在不起作用。

2 个答案:

答案 0 :(得分:10)

如果包含以下行,该解决方案实际上变得相当简单:

[assembly: RequiresSTA] 

在页面顶部,它将设置整个程序集以使用STA,它不再抛出错误。

答案 1 :(得分:5)

您可以尝试启动新线程并设置其ApartmentState:

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

代表:

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

或内联版本:

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