问题标签 [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.

0 投票
2 回答
24628 浏览

wpf - 为什么 WPF 要求将 STAThread 属性应用于 Main 方法?

我是 WPF 新手,在我阅读的每个教程中,他们要么将[System.STAThread]属性应用于他们的Main方法,要么告诉读者这样做。

这个属性真的是“必需的”吗?如果是这样,为什么?

0 投票
1 回答
1527 浏览

c# - 为什么 Thread.Join 不让 COM 消息通过?

我正在运行一些执行以下操作的多线程代码。

  1. 在 STA 线程上,我创建了一个“工作”线程并运行它。
  2. STA 线程然后等待工作线程退出。
  3. 工作线程调用 STA 线程上的 STA COM 对象的代理上的方法,然后退出。

在第 2 步中,我Thread.Join()用于等待工作线程退出。

的文档Thread.Join()声明它阻塞调用线程,直到线程终止,同时继续执行标准 COM 和 SendMessage 泵送

然而,发生的事情是工作线程在 COM 调用上“永远”阻塞。STA 线程从不为 COM 调用提供服务,而在工作线程上调用 Thread.Join() 时它被阻塞。

我希望 STA 线程能够在被 Thread.Join 阻塞时为 COM 调用提供服务。

谁能解释这里可能发生的事情?


这是调用 Thread.Join 的本机调用堆栈(在本机代码调试模式下运行 VS,所以差异可能是由于不使用 WinDbg?):

这是文章中显示的调用堆栈,用于调用 Thread.Join 的 STA 线程:它似乎与我在上次调用时看到的不同。

这是文章的 MTA 线程的调用堆栈:

0 投票
1 回答
290 浏览

c# - 如何延迟主窗体的实例化,直到响应 WinForms 应用程序中的事件?

一些背景:我在下面的代码中得到以下异常。

ThreadStateException:无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中。

Main() 方法标有 [STAThread] 属性。该应用程序应该在没有窗口的情况下启动并侦听来自第三方数据上下文共享库的事件。当事件处理程序被触发时,我希望它创建并显示表单,如果还没有的话。该表单仅包含一个网络浏览器控件。

所以,我的问题是如何延迟应用程序的主窗体(带浏览器控件)的实例化,直到触发事件处理程序?

在这种情况下,我想我可以通过将表单传递给 ApplicationContext 构造函数从一开始就创建表单,然后将其隐藏,但我真的很好奇为什么这不起作用。

...

0 投票
4 回答
111013 浏览

.net - 单线程单元 - 无法实例化 ActiveX 控件

我需要获取有关 HTML 页面中应用的 CSS 样式的信息。我使用 AxWebBrowser 并迭代 IHTMLDOMNode。我能够获取我需要的所有数据并将代码移动到我的应用程序中。问题是这部分在后台工作人员内部运行,并且在尝试实例化控件时出现异常。

除了 AxWebBrowser 之外,还有什么方法可以解决这个问题或其他选项吗?

0 投票
1 回答
1596 浏览

c# - 如何使 Quartz.net 作业在单线程单元中运行?

我只是尝试了这个:

但它会产生 InvalidOperationException。想法?

0 投票
6 回答
7607 浏览

c# - 将 Keith Hill 的 PowerShell Get-Clipboard 和 Set-Clipboard 转换为 PSM1 脚本

我想将 Keith Hill 的 Get-Clipboard 和 Set-Clipboard 的 C# 实现转换为纯 PowerShell 作为 .PSM1 文件。

有没有办法像他在使用剪贴板时在 Cmdlet 中那样在 PowerShell 中启动 STA 线程?

博客文章
代码

0 投票
1 回答
768 浏览

multithreading - 单线程单元中的工作流 4.0?

我现在正在努力研究 WF 4.0,但我很难弄清楚如何在 STA 线程中运行工作流。我需要在工作流中构建 XPS 文档,这意味着我需要创建 UI 元素 (FixedPage),这意味着运行工作流的线程必须是 STA。

在 3.0 中,您可以使用 ManualWorkflowSchedulerService 做一些魔术(我没有管理这部分代码,所以这里没有详细信息)以使工作流在 STA 线程中运行。但现在 4.0 大不一样了;甚至 beta 2 也与 beta 1 不同...

有人知道如何让 4.0 工作流在 STA 线程中运行吗?


我不能使用 WorkflowInvoker 因为它只适用于不需要持久性的短期工作流,我这样做了。

0 投票
1 回答
207 浏览

wcf - 双工 WCF + COM 对象的静态集合

我正在尝试构建一个 WCF 服务,该服务公开我没有原始源的特定 COM 对象的功能。我正在使用双工绑定,以便每个客户端都有自己的实例,因为每个特定实例都有事件绑定,这些事件通过回调(IAgent)传递。似乎存在死锁或其他什么,因为在第一个操作之后,我的服务在我的第二个操作的锁定处阻塞。我已经尝试实现这些自定义 STA 属性和操作行为(http://devlicio.us/blogs/scott_seely/archive/2009/07/17/calling-an-sta-com-object-from-a-wcf-operation。 aspx)但我的 OperationContext.Current 始终为空。非常感谢任何建议。

服务

收藏:

第一个动作:

第二个动作:

0 投票
5 回答
16745 浏览

.net - .NET Windows 服务需要使用 STAThread

我创建了一个将调用一些 COM 组件的 Windows 服务,因此我将 [STAThread] 标记到 Main 函数。但是,当计时器触发时,它会报告 MTA 并且 COM 调用失败。我怎样才能解决这个问题?

0 投票
5 回答
71740 浏览

c# - 如何在 STA 线程中运行某些东西?

在我的 WPF 应用程序中,我进行了一些异步通信(与服务器)。在回调函数中,我最终从服务器的结果创建 InkPresenter 对象。这要求正在运行的线程是 STA,而目前显然不是。因此我得到以下异常:

无法创建程序集中定义的“InkPresenter”实例 [..] 调用线程必须是 STA,因为许多 UI 组件都需要这个。

目前我的异步函数调用是这样的:

如何使回调(将创建 InkPresenter)成为 STA?或者在新的 STA 线程中调用 XamlReader 解析。