Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WatIn多线程_C#_Multithreading_Watin - Fatal编程技术网

C# WatIn多线程

C# WatIn多线程,c#,multithreading,watin,C#,Multithreading,Watin,如何使用异步委托处理WatIn?我尝试过,但它返回了以下错误: CurrentThread需要将其ApartmentState设置为 ApartmentState.STA能够自动化Internet Explorer 我想你对你的代表使用BeginInvoke。他们使用线程池来执行线程工作,线程池中的线程都是MTA的。你必须用老式的方式创建自己的线程。thread类提供了GetApartmentState和SetApartmentState方法来更改单元模型 我想你可能需要你自己的信息泵,以及在你

如何使用异步委托处理WatIn?我尝试过,但它返回了以下错误:

CurrentThread需要将其ApartmentState设置为 ApartmentState.STA能够自动化Internet Explorer

我想你对你的代表使用BeginInvoke。他们使用线程池来执行线程工作,线程池中的线程都是MTA的。你必须用老式的方式创建自己的线程。thread类提供了GetApartmentState和SetApartmentState方法来更改单元模型

我想你可能需要你自己的信息泵,以及在你的线程

像这样的事情可能会让你开始:

var th = new Thread(() => { /* do work */ });
th.SetApartmentState(ApartmentState.STA);
th.Start();

由于IE COM互操作的工作性质,它本质上需要在单线程单元中运行。以下内容摘自[watin.org]关于该主题的页面

为什么首先需要设置ApartmentState

从MSDN复制:

“因为COM类使用公寓, 公共语言运行库需要 创建并初始化单元 在COM中调用COM对象时 互操作情况。托管线程 可以创建并输入单线程 只允许一人居住的公寓 线程或多线程单元 包含一个或多个的MTA 线程。”

由于Internet Explorer不是线程安全的,我们需要使用STA

含意

在控制台或控制台中使用WatiN可以很好地工作 当您应用 [StatThread]属性到主线程 方法的唯一入口点 应用这条路是主线 作为STA运行,一切顺利。什么时候 使用像MBUnit、NUnit或 任何其他启动主控台的跑步者 线程,您的代码/测试取决于 公寓声明跑步者开始跑步 有

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

WatiN将抛出一个 创建时出现ThreadStateException WatiN.Core.IE的一个实例 类,以帮助您提醒设置 斯塔州公寓

使用属性,从NUnit 2.5开始

编辑


使用属性,从NUnit 3.0开始。

如果你在谈论线程的构造函数,我认为你错了。如果你在谈论别的事情,请你澄清一下好吗?我看不出问题所在。