6

我在 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 之外的任何东西时,需要 STA 解决方案。但由于某种原因,它现在不起作用。

4

2 回答 2

10

如果您包含以下行,则解决方案实际上非常简单:

[assembly: RequiresSTA] 

在您的页面顶部,它将设置整个程序集以使用 STA,并且不再引发错误。

于 2012-10-11T12:38:48.477 回答
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...
});
于 2012-10-05T20:48:24.117 回答