问题标签 [apartment-state]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1401 浏览

c# - Winforms:一个 COM 对象需要一个 STAThread,另一个需要一个 MTAThread。我该如何使用它们?

我正在尝试使用两个 COM 组件构建一个 Winforms 应用程序。但是,其中一个组件仅在使用时有效[MTAThread],而另一个仅在[STAThread].

推荐的解决方案是什么?

0 投票
2 回答
6189 浏览

c# - 如何检查当前线程的公寓状态?

我有一个需要在 STA 公寓状态下运行的功能。我不想检查它是否作为 STA 运行,如果没有生成一个在 STA 中运行的新线程。

如何检查当前线程正在运行的公寓状态?

0 投票
2 回答
3307 浏览

.net - NUnit GUI Runner 和 Apartment State

如何在 NUnit GUI 运行器中设置公寓状态?我正在尝试使用 WatiN 运行单个 NUnit 测试,并且收到以下消息:

MyNamespace.LoginTests.CanLogin:
System.Threading.ThreadStateException : CurrentThread 需要将其 ApartmentState 设置为 ApartmentState.STA 才能使 Internet Explorer 自动化。

0 投票
4 回答
5380 浏览

c# - 一个进程内可以共存多少个“STA”线程?

STA我需要在我的 ASP.NET 应用程序中使用多个线程来使用某些COM组件。

我在每个进程的某个地方读到,只能STA存在一个线程。我编写了一个示例项目并创建了许多线程并将它们的单元状态设置为STA,并且它们COM毫无例外地使用对象。

一个进程中可以有很多STA线程吗?

0 投票
1 回答
314 浏览

.net - 我可以修改将 BeginInvoke 我的委托的线程的性质吗?

我正在实现一个具有BeginSomething()EndSomething()对的接口,并且我的实现在一个方法中Execute()

所以我创建了一个Action action = Execute,并action.BeginInvoke在 BeginSomething 和action.EndInvokeEndSomething 中调用。但是,我的 Execute 方法必须由其单元状态为 STA(单线程单元)的线程调用。通常这是通过调用来完成的Thread.SetApartmentState,但在这种情况下,我不知道哪个线程将调用我的方法。

我应该如何使调用线程成为 STA?

0 投票
1 回答
8646 浏览

activex - 无法实例化 ActiveX 控件,因为线程位于单线程单元中。将 PC 从睡眠中唤醒后发生

我正在开发一个 VOIP 客户端(窗口形式),它在拨打或接听电话时会打开一个浏览器窗口(ExtendedWebBrowser)。通常它工作正常,但如果计算机进入睡眠模式然后唤醒程序将崩溃并出现以下错误:

我尝试在代码中设置线程,thread.SetApartmentState(ApartmentState.STA)但我得到了相同的结果。另外,我确实有[STAThread]之前的main()功能。现在我想知道它是否与计算机进入睡眠状态时线程未正确终止有关,但我不确定。我的背景是 C++ 和 DirectX,这是我工作过的第一个 Windows 窗体,因此将不胜感激。

跟进:在发现程序在工作线程而不是主线程上启动后,我能够解决这个问题。可以在此处阅读更多信息:Sleep(suspend) 和 Resuming windows form 在工作线程而不是主线程上启动程序

0 投票
1 回答
310 浏览

c# - 将 LoaderOptimization 应用于进程内 COM 服务器

我需要在我的 .NET 进程内 COM 服务器中创建多个 AppDomain(它是 Windows 资源管理器命名空间扩展)。

在我的测试控制台应用程序中,我能够在 40 秒内创建 10 个域 + WPF 窗口,这是不可接受的。添加LoaderOptimization.MultiDomainHost速度最多 2-5 秒,这没关系。

但是,COM 服务器中没有Main方法,并且指定 LoaderOptimizationAppDomainSetup仅影响加载 2 个或更多附加域(即第一个附加 AppDomain 启动 3-4 秒,其他在 0.1-0.3 秒内)

那么,我可以指定LoaderOptimization进程内 COM 服务器吗?如果可以,如何指定?

0 投票
2 回答
14444 浏览

c# - 调用线程必须是 STA,因为很多 UI 组件都需要这个 WPF

我正在使用WPF Toolkit提供的 MessageBox 。我得到了错误

调用线程必须是 STA,因为很多 UI 组件都需要这个

在这种情况下如何设置 ApartmentState

编辑:我正在尝试使用 WPF Toolkit 的 MessageBox 控件显示无模式的 MessageBox。到目前为止,我拥有的代码如下:

0 投票
2 回答
1059 浏览

nunit - TeamCity SpecFlow NUnit Watin 和 ApartmentState STA

我试图让我们的 specflow watin 测试在我们新的 teamcity 服务器上运行。问题是我无法让内置的 nunit 运行器在 appartmentstate STA 中运行测试。

我们之前使用了这个配置,它适用于其他测试运行器:

但是 TeamCity NUnit 测试运行器似乎没有接受这个配置。我们还有其他配置健全性测试,所以我们知道测试运行者至少会读取我们测试项目的配置。

也可以像这样使用 RequiresSTA 属性:

但是由于 NUnit 测试是由 SpecFlow 生成的,所以我无法控制这些属性的设置方式。

我怎样才能让这个设置工作?

0 投票
1 回答
488 浏览

nunit - SpecFlow NUnit RequiresSTA 属性

我需要让 SpecFlow 生成具有 RequiresSTA 属性的 NUnit 测试。我怎样才能做到这一点?