问题标签 [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 回答
1532 浏览

c# - STA Thread is not loading the Main Window in WPF

I am loading MainWindow in App_Startup (). I wanted to show the progress bar while loading the window. But it is not working :

I want to load the window from thread :

0 投票
1 回答
6820 浏览

powershell - Powershell -sta(公寓状态)是首选吗?

在过去的几个月里,我一直在涉足 Powershell (2.0),并且很想用它来现代化和标准化一些工作流程——主要是基于 DOS 的流程。由于工作的性质,可能同时执行大约 100 次相同的脚本。

首先——以这种方式使用 Powershell “安全”吗?我已经看到 -STA 作为一个执行选项 - 在同时执行大量相同脚本时使用 Powershell 的首选方法是,还是仅在绝对必要时使用?在我的搜索中,我还没有真正想出“我什么时候应该使用公寓状态?”的答案。我相信我打算做的大部分脚本(如果不是全部的话)都不会被线程化。

提前感谢任何可以了解 Powershell 公寓状态的人!

0 投票
1 回答
1432 浏览

c# - C# STAThread COMException

我有一个外部组件 (C++),我想从我的 C# 代码中调用它。

代码是这样的:

所以问题是,在第一次调用时它运行良好,调用了外部组件,我得到了结果。

但是当我尝试在另一个线程中调用它时,我遇到了一个异常: System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' ... 。由于 STAThread,我确定抛出了这个异常。因为如果我从 Main 函数中删除 [STAThread] 属性,外部组件的第一次调用也会发生同样的情况,它工作正常。

如何从其他线程调用此外部组件以消除此异常?

更新 - - - - - - -

现在发生了其他疯狂的事情。当我使用 F5 从 Visual Studio 启动程序时,问题也出现在第一次调用中,但是当我直接执行二进制 .exe 文件时,它正在工作(从另一个线程它不是:()。如果我切换从 Debug 到 Release 的构建并使用 F5 从 Visual Studio 启动它,第一个调用再次工作。

为什么会这样?

提前感谢您的帮助!

最好的问候,佐利

0 投票
3 回答
7597 浏览

r - 从极坐标到笛卡尔坐标的方差矩阵

我正在处理极坐标中的时间序列,并且正在应用卡尔曼滤波器进行预测。时间序列与卫星轨道有关。

然而,我对方差的预测和估计用极坐标 [r,theta] 表示。

我知道如何使用该函数将我的预测转换为笛卡尔坐标

但我不知道如何处理方差,因为它不是线性算子。

如果您可以帮助我进行转换,我会按顺序向您提供我的数据:

第一个预测的方差矩阵是:

我想知道如何在笛卡尔坐标中获得这个矩阵以进行第一次预测。谢谢!

0 投票
0 回答
573 浏览

clipboard - 使用 C#.net 访问 Office 剪贴板

我使用 Visual Studio 2005 使用 c#.net 开发“Windows 服务”。我的代码需要访问 MS office 剪贴板。但是在尝试访问 Clipboard 类时,调试器会抛出错误

“在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记了 STAThreadAttribute。”

在运行期间。在检查解决方案时,我发现这可以通过在 main 方法之前添加“[STAThread]”来解决。但是在添加这个时,我得到一个编译错误

“找不到类型或命名空间名称‘STAThread’(您是否缺少 using 指令或程序集引用?)”

是否可以使用我当前版本的 .NET(.NET 3.0) 访问剪贴板?

主要方法位于名为“program.cs”的文件中,逻辑位于名为“Service.cs”的文件中。Service.cs 使用剪贴板。

/* 程序.cs */

/* 服务.cs */

0 投票
1 回答
377 浏览

c# - 防止事件产生另一个线程

不久前,我正在从这个 [网站][1] 中阅读有关委托和事件(出于完全不同的原因)的信息,在那里我得到的印象是,如果您的事件花费的时间足够长,则会生成一个单独的线程。好吧,这让我想到了一个我似乎无法修复的错误。所以我正在为我的 MSR 设备制作一个键盘楔形程序,通过 RS232 端口进行通信。我做了这个类来处理输入。

当我打开这个 ComPortInput 类时,我订阅了 DataReceived 事件。如果我猜对了,那么如果我将延迟设置得足够高,那么我的 dataevent 将创建一个新线程。我认为最好通过查看我的代码来描述问题。

程序.cs

ComPortInput.cs。只是 datareceived 事件

SerialPortWedge.cs

格式化十六进制字符串输出

Clipboard.Clear()程序因此错误而崩溃

在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记了 STAThreadAttribute。

我不知道它为什么这样做。如果我在当前线程 appartment 状态中添加了一个手表,那肯定是 MTA。然而,如果我在程序的开始处打断它说它是 STA。那么它为什么会切换呢?更让我难过的是,如果我使用不同的输出类,它不会抛出那个错误

SendRawClipboardOutput.cs

这个也没有

SendTrimClipboardOutput.cs

我不知道..我很难过。有人关心解决这个问题吗?

编辑

所以在帮助下,我想出了这个作为我的解决方案。由于 SerialPortWedge 是一个类而不是控件,我无法调用 Invoke 方法。我必须传递SynchronizationContext.Current给我的 SerialPortWedge。所以在我的主要形式中,我在实例化我的 SerialPortWedge 后得到了这个。

然后在 SerialPortWedge 我将 Input_DataAvailable 更改为此

它现在可以按需要工作。谢谢大家的帮助。:)

0 投票
0 回答
34 浏览

asp.net - 来自 COM 的事件:在 WinForms/WPF 中工作正常,但在 ASP.Net 中不起作用

请告诉我为什么以下在 WinForms/WPF 中运行良好而不在 ASP.Net 中运行良好。

我们有一个针对 .Net 3.5 的类库。它有一个互操作引用(从 TLB 生成)。

然后我有一个 WinForms/WPF 应用程序(针对.Net 4.5),它创建一个新的 MyClass 实例,订阅 Changed 事件并调用 Init()。这完美地工作。

我正在尝试在 ASP.Net Web 表单应用程序中做同样的事情。正在调用 Init() 方法,但从未触发 MyClass 中的 objCom_AvailabilityChanged 事件。

请解释我做错了什么。

非常感谢!

0 投票
1 回答
11384 浏览

c# - 在 C# 的控制台程序中使用 [STAThread]

我为 C# 控制台应用程序编写了代码。它将剪贴板值复制到文件中,并且运行时没有任何错误。

现在我想在另一个带有其他代码的 C# 项目中使用它。

我使用 [STAThread]after class{},但它给了我一个错误:

:: 属性“STAThread”在此声明类型上无效。它仅对“方法”声明有效。

我能做些什么?

0 投票
1 回答
97 浏览

com - 使用 COM 公寓 STA

在阅读了有关此主题的大部分主题后,我仍然感到困惑。

如果我在 .Net 中使用来自多个线程的 COM STA DLL 实例,COM 技术不会使用队列序列化调用吗?

多个线程在做

如果是真的,这可以吗,唯一的惩罚是它会很慢?

0 投票
1 回答
979 浏览

wpf - WCF (WPF) 错误:调用线程必须是 STA

我从服务参考中收到一些数据。

结构fe如下:
我从服务引用中接收到一些驱动数据(命名空间:ServiceReference.Driver)
我的项目中驱动数据的命名空间是'MyProject.Driver'。

DriverUserControl 应该在 MyProject.Driver 的构造函数中创建。

但是当我到达这里时:

每当它到达用户控件的构造函数时,就会出现以下错误“调用线程必须是 STA,因为许多 UI 组件都需要这个”。

因为我从来没有在我的项目中的任何地方启动过一个线程,所以我不知道我应该如何将它设置为 STA。我猜 servicereference 被视为一个线程,但是,有没有办法将其更改为 STA?

谢谢。