问题标签 [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 投票
0 回答
1398 浏览

c# - 无法在 C# Windows 应用程序主程序中将当前线程单元设置为 STA

我在 Visual Studio 2010 中创建了一个小型 Windows 应用程序项目,我无法将主线程的单元属性设置为 STA,默认情况下它设置为 MTA,即使使用该属性[STAThread][STAThreadAttribute]在我的 main 方法上也是如此。当我显示表单并更改其控件属性时,这会导致引发异常。

这是我的应用程序入口点的屏幕截图,我在其中显示主线程ApartmentSate属性的值并尝试将其更改为 STA(我不在我的应用程序中执行此操作,它只是为了显示如果有人建议更改会发生什么情况它以语法方式):

主线程的 ApartmentState 属性设置为 MTA

下面是调试部分中我的应用程序属性的屏幕截图:

我的应用程序的调试属性

我不明白,因为我没有离开主线程。你知道这个问题的根源是什么以及我该如何解决它吗?

编辑:如果我禁用“启用 Visual Studio 托管进程”选项,则该ApartmentSate属性正确设置为 STA。这是避免问题的最佳方法,还是我可以用更好的解决方案解决这个问题?

谢谢

0 投票
1 回答
1448 浏览

c++ - 如何查询当前线程的 COM 单元状态

.NET Thread 类有一个方便的函数 GetApartmentState(),它返回线程上下文的单元。本机代码(C++,C)是否有类似的Co<something-something>函数?我觉得我应该知道,因为我已经编写 COM 近 10 年了,但我找不到答案。

0 投票
3 回答
1350 浏览

c# - C# 关闭使用 Application.Run() 的线程

我正在尝试使用可以访问其代码的 C# DLL,但实际上我无法更改代码并构建它的自定义版本。调用代码是一个 C# WinForms 项目,C# DLL 也使用 WinForms 来处理 Windows 系统事件。问题是 DLL 使用后台线程在其中使用 Application.Run() ,并且有内置的方法可以杀死或停止该线程。这是代码片段:

显然,我希望杀死它的方式是使用 Application.Exit(),但这也退出了我自己的 WinForms 项目,这不是我想要发生的。如果我只是关闭我的应用程序而不调用 Application.Exit(),则 DLL 将继续在后台运行。我希望能够实例化 DllClass 对象,使用它,然后在完成后将其关闭。我想出了一个方法来获取它正在运行的线程的 Thread 对象,但是在它上面调用 Thread.Abort() 实际上并没有杀死线程。有没有办法从 DLL 外部强制中止 Application.Run() 调用?

0 投票
1 回答
50 浏览

c# - SetApartmentState 中的 ArgumentOutOfRangeException

我有这样一段代码:

一旦我ArgumentOutOfRangeException在第二行遇到异常。这怎么可能?我能做些什么来防止它以后再次发生?

提前致谢!

0 投票
1 回答
1237 浏览

c# - ASP.Net WebApi STA 模式

这篇文章从能够在 STA 模式下运行的问题中剔除 WebApi。但是这篇文章也有2年的历史了。

我一直在研究较新的 WebApi2,但似乎找不到MessageHandlers在 STA 模式下运行的方法。

那么有没有人找到一种在 STA 模式下运行 WebApi 或 WebApi2 的方法?

0 投票
1 回答
1069 浏览

c# - Parallel Foreach 抛出一个 ApartmentState 异常

我有以下代码用于为预定义列表创建标签页:

我收到以下异常:

无法实例化,因为当前线程不在单线程单元中。

将公寓状态设置为 STA 的正确方法是什么?

0 投票
1 回答
699 浏览

c# - windows窗体的STAThread要求

AFAIK,所有 Windows 窗体应用程序都应在其方法[STAThread]之上设置指令。Main()

但是,有一个例外。我们正在使用 Compact Framework 为 Windows Mobile 设备编写应用程序。紧凑的框架甚至不支持[STAThread]指令,它只有[MTAThread]. 不过,我在那里从未遇到任何问题。

现在,更进一步,您还可以在完整的 Windows 系统上运行 Compact Framework 应用程序。我认为在这种情况下将使用完整的 .NET 框架。

那时,我们正在运行带有MTA公寓状态的代码,它在完整的 Windows 系统上使用 Windows 窗体。这让我想到一个问题,如果一个紧凑的框架应用程序运行在一个成熟的 Windows 操作系统上,为什么它不抱怨缺少[STAThread]指令?

0 投票
1 回答
631 浏览

c# - 如何设置从 c# 运行的 PowerShell 代码的运行空间?

我有一个运行多个 Powershell 脚本的应用程序。(它基本上是一个包装应用程序,它提取一些存储在 SQL 数据库中的 PS 脚本,然后运行它们。)

我添加的其中一个 Powershell 脚本现在失败了,我有一种感觉是因为它需要在 STA 公寓状态下运行。但是,我不知道如何在 c# 中设置公寓状态。

我正在使用的功能如下:

如何设置它以在 STA 模式下运行脚本?

0 投票
1 回答
84 浏览

c# - 在从 STAThread 实例调用的类上创建 Thread 时,单元状态将是什么?

我有项目 A 和项目 B。项目 B 有一个与 Microsoft Outlook Interop 一起工作的线程。项目 A 是一个 GUI,在主入口点上标记为 STAThread。

如果我从 A 中调用项目 b,在项目 B 中创建的线程是 STA 还是 MTA?

我有一个错误“正在检索具有 CLSID 的组件的 COM 类工厂......由于应用程序正在调度输入同步调用,因此无法进行传出调用。”

0 投票
1 回答
204 浏览

delphi - 如何让控制台应用程序的主线程成为 MTA?

使用 Delphi,如何创建一个 (Windows) 控制台应用程序,其主线程初始化为COINIT_MULTITHREADED

如果我CoInitializeEx(nil, COINIT_MULTITHREADED)在第一条语句中调用,我会得到一个 HRESULT 0x80010106(设置后无法更改线程模式),所以很明显一些以前运行的代码已经调用了CoInitialize/Ex.

我怎样才能得到主线程COINIT_MULTITHREADED