问题标签 [sta]
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.
.net - 一个STA线程模式线程也阻塞了winform UI线程?
我正在使用来自后台线程的 STA COM 对象,当我从处于 STA 线程模式的新线程调用它时,COM 对象的一个方法将阻塞,因为 COM 对象的模式是 STA,并且 UI 线程似乎也被阻止了,我可以避免这个 UI 阻止吗?
c# - 来自外部进程的 C# 中的线程问题
我有这个简单的代码:
不幸的是,当运行此代码(来自第三方进程)时,线程并没有真正运行。在进程资源管理器和 VS 调试器中,我看到线程已创建并且其状态为“正在运行”。
主线程的单元是 STA,我在内部线程上尝试了 STA 和 MTA。
当我最后添加到Run()
方法时,invokerThread.Join();
线程确实运行。但话又说回来,它并没有真正帮助。
我错过了什么?
编辑:这是有关代码托管的更多信息-
Run()
方法是通过 COM 互操作从一个也是托管可执行程序集的进程调用的(使用 COM 互操作的原因是因为系统中的所有其他组件都是本机的)。
该方法RunOnBackground()
在跟踪之后包含更多代码,通常其执行持续 10 到 20 秒,包括启动另一个进程并等待其终止。此外,我在代码中还有一些其他区域,我将一些调试信息写入 Trace。在调试代码时,Run()
照常运行,并且在invokerThread.Start();
调用者线程的状态为“正在运行”之后(尽管RunOnBackground()
方法内的断点不会停止)。
当我在方法invokerThread.Join()
的末尾添加时,调试Run()
器会RunOnBackground()
在Join()
.
asp.net - 是否有用于通过 STA 线程调用委托的通用“FuncSTA”?
我有一个ASP.NET
应用程序,需要在其中使用一些COM
组件。
我需要一个包装类,Func
或者Action
创建一个新STA
线程并使用该线程或类似的东西运行委托。您是否知道开箱即用的此类或库或示例代码?
c# - 一个进程内可以共存多少个“STA”线程?
STA
我需要在我的 ASP.NET 应用程序中使用多个线程来使用某些COM
组件。
我在每个进程的某个地方读到,只能STA
存在一个线程。我编写了一个示例项目并创建了许多线程并将它们的单元状态设置为STA
,并且它们COM
毫无例外地使用对象。
一个进程中可以有很多STA
线程吗?
c# - 如何告诉线程池在“STA”线程上运行委托?
我需要一个线程池来处理项目中的COM
对象ASP.NET
。
c# - 与 MTA 线程相比,STA 线程有哪些限制?
如果我们像这样创建一个线程 STA:Thread.SetApartmentState(STA);
那么它就不能运行带有[MTAThread]
属性标记的代码。
我们[STAThread]
在 Windows 和控制台应用程序中见过,但我从未见过带有[MTAThread]
属性的代码,也不知道哪些 .NET 库使用了这个属性。
我的问题是,与具有 MTA 单元状态的线程(自然 .NET 线程)相比,单元状态设置为 STA 的线程有哪些限制?
c# - 为什么 WinForms 应用程序默认是 STAThread?
当您使用 Visual Studio 创建一个空的WinForms应用程序时,该模板具有STAThread
主应用程序类中的属性。
我一直在阅读一些关于它的文档,但我不确定我是否完全理解它。
真的,我对此有一些疑问:
- 为什么要添加这个属性?
- 这是什么意思?
- 如果删除此属性会发生什么?
c# - 如何将后台工作线程设置为单线程单元?
我正在创建一个自动化测试运行应用程序。在应用程序的这一部分,我正在使用轮询服务器。它通过不断地轮询 Web 服务器来确定何时应该运行新的自动化测试(对于我们的 GUI 应用程序的夜间自动化运行)。
当轮询服务器看到一个请求时,它会下载所有必要的信息,然后在后台工作程序中执行测试运行。Clipboard.Clear()
问题是测试运行的一部分具有在后台工作线程中发生的OLE、COM 和其他调用(例如, )。当其中一个调用发生时,会发生以下异常:
在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记了 STAThreadAttribute。
如何将后台工作线程标记为单线程单元?我的 Program.cs 中的 Main 调用显然已经具有该属性。
c++-cli - STA、MTA 冲突警告 重要吗?
我最近开始为原生 c++ 库编写 C++/CLI 包装器。我现在收到这个编译警告
“警告 LNK4249:指令 '/CLRTHREADATTRIBUTE:STA' 与命令行冲突;被忽略”
我的 c++/cli 包装器是在链接器的命令行参数中为 MTA 设置的,但我不知道哪个文件或项目试图给出 STA 指令。
我做了足够多的阅读来担心 .NET 会强制库变为多线程。我读到这主要影响我的应用程序对 COM 的使用,但我不确定我的 DLL 是否或在何处使用 COM。我使用互操作服务来编组字符串数据,并使用“msclr\auto_gcroot.h”来指向非托管类中的托管类。在被包装的本机 c++ 库中,我包含以下标头:
有没有人有任何建议可以帮助我避免将来的痛苦经历,或者我不应该担心它?
.net - ASPX 页面中的 Aspcompat
在我的 aspx 页面中,我调用了一个使用 STA 的 COM 组件。所以我使用 aspcompat=true 参数,但我想了解逻辑。它究竟是做什么的?据我所知,在 STA 中,假设它只被一个线程调用。所以我应该自己提供线程安全。
如果这是正确的,aspcompat 参数在哪里提供线程安全?在整个页面上,还是仅在我访问 STA 组件的地方?