【问题标题】:Watin with system.Threading.tasks.Task throw ThreadStateExceptionWatin 与 system.Threading.tasks.Task 抛出 ThreadStateException
【发布时间】:2015-09-21 22:54:31
【问题描述】:

我在 Task 中使用 Watin,它抛出异常

ThreadStateException with an error message of 'The CurrentThread needs to have its ApartmentState set to ApartmentState.STA to be able to automate Internet Explorer'

我的代码是这样的

 Task task = Task.Factory.StartNew(() =>
                    {
              try{
                     string  Url="www.google.com";
                     IE ie = new IE(Url);
                }
               catch (Exception ex)
             {
             throw ex; //ThreadStateException 
             }    
});

我该如何解决这个问题?
我正在尝试谷歌但无法找到解决方案。

【问题讨论】:

  • 如果您关心任务需要在哪种线程上运行,也许您应该只创建一个线程。您可以将其包装在使用TaskCompletionSource 来公开Task 的方法中。见stackoverflow.com/a/16722767/1726343

标签: c# multithreading watin


【解决方案1】:

代码没有“错误”。阅读 WatIn 文档:

http://watin.org/documentation/sta-apartmentstate/

来自文档:

线程不是 STA 线程时 WatiN 的行为。

当你创建一个实例时,WatiN 会抛出一个 ThreadStateException WatiN.Core.IE 类,帮助您提醒设置 ApartmentState 到 STA。

【讨论】:

    【解决方案2】:

    使用带有等待的异步方法。你可以从网上获得很多这样的例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2012-06-12
      • 2023-03-08
      相关资源
      最近更新 更多