Tag: sta

如何告诉线程池在`STA`线程上运行委托?

我需要一个线程池来处理ASP.NET项目中的COM对象。 QueueUserWorkItemSTA(WaitCallback)

STA中的Akka.net演员

我需要将不同格式的数千个ms办公文档转换为一种通用格式。 为了加快速度,我将使用akka.net进行并行化。 WordSaveAsActor应该: 在单线公寓中运行 持有Word应用程序实例 在此实例上进行COM调用,例如SaveAs(..),其中包含来自多个并行线程的接收消息的路径 任何崩溃都会重启自己 甚至可以在STA中运行akka.net actor吗? 如果我以这种方式使用akka.net,有什么顾虑吗?

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

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

与MTA线程相比,STA线程有哪些限制?

如果我们像这样创建一个线程STA: Thread.SetApartmentState(STA); 然后它无法运行标有[MTAThread]属性的代码。 我们在Windows和控制台应用程序中看到[STAThread] ,但我从未见过具有[MTAThread]属性的代码,并且不知道哪些.NET库使用此属性。 我的问题是,与具有MTA单元状态(自然.NET线程)的线程相比,具有设置为STA的单元状态的线程的限制是什么?

调用线程必须是STA,因为许多UI组件在WPF中需要此错误。 在form.show()上

首先,我在网站上阅读了几个类似问题的答案,但说实话,我发现它们有点令人困惑(由于我缺乏经验而不是答案!)。 我正在使用FileSystemWatcher()类来监视正在创建/更改的文件的文件夹。 一旦事件发生,我就想在项目中加载另一个表单。 而不是加载表单我在新表单上的构造函数尝试执行时得到错误。 我只使用一个线程 – 我不是试图在不同的线程下加载表单。 我的代码如下 //MainWindow public static void FolderWatcher() { FileSystemWatcher fsWatcher = new FileSystemWatcher(); fsWatcher.Path = “C:\\dump”; fsWatcher.Filter = “*”; fsWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; fsWatcher.Created += new FileSystemEventHandler(OnChanged); fsWatcher.EnableRaisingEvents = true; } public static void OnChanged(object source, FileSystemEventArgs e) { var imagePreview = new ImagePreview(); […]

为什么默认情况下WinForms应用程序是STAThread?

使用Visual Studio创建空WinForms应用程序时,模板在主应用程序类中具有STAThread属性。 我一直在阅读一些关于它的文档,但我不确定我是否理解它。 我真的有一些问题: 为什么要添加此属性? 这是什么意思? 如果删除此属性会发生什么?

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

我想将Keith Hill的Get-Clipboard和Set-Clipboard的C#实现转换为纯PowerShell作为.PSM1文件。 有没有办法在PowerShell中启动STA线程,就像他在使用剪贴板时在Cmdlet中一样? 博客文章 代码

在C#中启动STAThread

我仍然是C#的新手,尤其是C#中的线程。 我正在尝试启动一个需要单线程单元的函数( STAThread ) 但我无法编译以下代码: 该函数在名为MyClass的单独类中如下所示: internal static string DoX(string n, string p) { // does some work here that requires STAThread } 我已经尝试了函数顶部的[STAThread]属性,但这不起作用。 所以我试图创建一个新的Thread如下: Thread t = new Thread(new ThreadStart(MyClass.DoX)); 但这不会编译(最好的重载方法有无效的参数错误)。 然而,在线示例非常相似(这里的示例)我做错了什么,我怎么能简单地在新的STA线程中运行一个函数? 谢谢

MTA控制台应用程序从多个线程调用STA COM对象

虽然有很多关于COM和STA / MTA的问题(例如这里 ),但大多数人都在讨论具有UI的应用程序。 但是,我有以下设置: 控制台应用程序,默认为Multi-Threaded Apartment(Main()显式具有[MTAThread]属性)。 主线程产生一些工作线程。 主线程实例化单线程COM对象。 主线程调用Console.ReadLine()直到用户点击’q’,然后应用程序终止。 几个问题: 许多地方都提到需要为COM对象提供消息泵 。 我是否需要为主线程手动创建消息泵,或者CLR是否会在新的STA线程上为我创建消息泵,正如这个问题所示? 只是为了确保 – 假设CLR自动创建必要的管道,然后我可以使用来自任何工作线程的COM对象而无需显式同步吗? 在性能方面,以下哪项更好: 让CLR负责处理来自COM对象的编组。 在单独的STA线程上显式实例化对象,并让其他线程通过例如ConcurrentQueue与之通信。