STAThread 和多线程

2023-11-23

来自 MSDN 关于 STAThread 的文章:

指示应用程序的 COM 线程模型是单线程单元 (STA)。

(作为参考,那就是整篇文章.)

单线程公寓...好吧,这超出了我的理解范围。另外,我在某处读到,除非您的应用程序使用 COM 互操作,否则该属性实际上根本不执行任何操作。那么它到底有什么作用,以及它如何影响多线程应用程序?应该多线程应用程序(其中包括任何使用Timer异步方法调用,而不仅仅是线程池等)使用 MTAThread,即使它“只是为了安全”? STAThread 和 MTAThread 实际上是做什么的?


单元线程是一个 COM 概念;如果您不使用 COM,并且您调用的 API 都没有“在幕后”使用 COM,那么您无需担心公寓。

如果您确实需要了解公寓,那么详细信息可以获取有点复杂;一个可能过于简化的版本是,标记为 STA 的 COM 对象必须在 STAThread 上运行,而标记为 MTA 的 COM 对象必须在 MTA 线程上运行。使用这些规则,COM 可以优化这些不同对象之间的调用,避免在不必要的地方进行封送。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STAThread 和多线程 的相关文章

  • 以概率从列表中选择随机元素

    我有一个包含四个项目 A B C D 的列表 每个项目都有被选择的概率 例如 A 有 74 的机会被选中 B 15 C 7 D 4 我想创建一个函数 根据其概率随机选择一个项目 有什么帮助吗 为您的项目定义一个类 如下所示 class It
  • 析构函数、dispose 和 Finalize 方法之间的区别

    我正在研究垃圾收集器在 C 中的工作原理 我对使用感到困惑Destructor Dispose and Finalize方法 根据我的研究和理解 在我的类中拥有析构函数方法将告诉垃圾收集器以析构函数方法中提到的方式执行垃圾收集 该方法不能在
  • 泛型类上的 DebuggerDisplay

    我在应用时遇到问题DebuggerDisplay泛型类的属性 DebuggerDisplay foo class Foo DebuggerDisplay Bar t class Bar
  • 二元运算符重载、隐式类型转换

    class my bool private bool value public my bool bool value value value explicit operator bool return value friend my boo
  • 模板“内联”函数的静态局部变量[重复]

    这个问题在这里已经有答案了 static的局部变量inline如果我的理解是正确的 C 中的函数保证像单个全局变量一样存在 如果inline函数是一个模板 编译器可以在哪里生成该函数的多个版本 下面这篇文章应该很好地回答你的问题 http
  • 使用 INF 文件 C++ 以编程方式安装驱动程序

    这里有人可以告诉我如何安装第 3 方设备驱动程序吗 如果提供了所有必需的文件 即 inf 文件 sys 等 则以编程方式进行 这 该解决方案应运行的最低操作系统是Windows2000 我尝试复制 inf文件放入Win文件夹 INF文件夹和
  • 加载配置文件时发生错误:访问路径 c:\Program Files (x86)\... 被拒绝

    我有一个在 Windows 7 上使用 Visual Studio 2010 中的安装程序部署的应用程序 该程序在 Windows 7 和 XP 上部署并运行良好 但当我在 Windows 8 系统上部署它时 出现有关访问配置文件的错误 该
  • C++ fill() 与 uninitialized_fill()

    您好 我是初学者 我想知道容器的 fill 和 uninitialized fill 之间的区别 我在谷歌上进行了快速搜索 但没有得到很好的答案 有人可以帮助我吗 fill 将值 使用赋值运算符 分配给已构造的对象 uninitialize
  • 阻止用户取消选择列表框中的项目?

    我有一个列表框 里面有很多项目 用户可以单击某个项目来编辑其内容 如何防止用户取消选择所有项目 即 用户不应该无法选择任何内容 您的情况缺少一个案例 即清除列表后 您将选择列表中不再存在的项目 我通过添加额外的检查来解决这个问题 var l
  • 如何在 .NET 中自定义 JSON 枚举的反序列化?

    我有以下示例 C 代码 它是使用 svcutil exe 应用程序从 xsd 自动生成的 DataContract public enum Foo EnumMember Value bar Bar 1 EnumMember Value ba
  • C++20 views::join 在生成的嵌套范围::single_view 上进入无限循环

    我正在使用 GCC 实现 v10 2 和 v11 来处理 C 20 范围 测试的行为std views join https en cppreference com w cpp ranges join view 我尝试使用生成嵌套视图sin
  • 向窗口句柄发送消息

    我尝试使用 sendmessage 将消息从我的 C 应用程序传递到 C 我的c 代码是这样的 int tmain int argc TCHAR argv COPYDATASTRUCT cpd cpd dwData 0 LPCWSTR st
  • C# 的 xml 序列化中是否有一个属性可以跳过空数组?

    C 的 xml 序列化中是否有一个属性可以跳过空数组 这将提高 xml 输出的可读性 好吧 你也许可以添加一个ShouldSerializeFoo method using System using System ComponentMode
  • 将纬度/经度转换为 X/Y,以便在美国地图图像上进行阿尔伯斯投影

    我正在尝试使用 C 或 Javascript 将纬度 经度转换为 X Y 坐标 以将带有 CSS 的 div 左 上 定位到美国地图的背景图像上 美国的标准地图投影是阿尔伯斯投影 如下所示 但 StackOverflow 仅提供参考基本墨卡
  • 使用可变参数模板函数计算多个值的平均值

    我正在尝试编写一个函数来确定任意数量参数的平均值 所有参数都具有相同的类型 出于学习目的 我尝试使用可变参数模板函数来做到这一点 这是我到目前为止所拥有的 template
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • Lambda 按值捕获和“mutable”关键字

    关键词的必要性mutable在 lambda 中 是造成极大混乱的根源 考虑代码 int x 10 function
  • 恐怖分子已弃用

    正在接听另一个问题 https stackoverflow com q 11830514 1468366 我偶然发现了man page http linux die net man 3 herror一个名为的函数herror 看起来很像pe
  • 使用 /clr 或 clr:pure(cpprestsdk 又名 casablanca)编译时不支持互斥

    我创建一个CLR project in visual c with 64 bit配置 并尝试使用cpprestsdk aka casablanca 64bit 但是当我运行项目时 出现了错误 1 gt Build started Proje
  • .NET 部署到网络共享

    我有一个 NET 3 5 应用程序 希望将其安装在客户端服务器上 并让工作站直接从网络共享运行它 我读过一些内容 似乎表明这并不像简单地将应用程序复制到网络共享那样简单 就像我对本机 exe 所做的那样 不幸的是 似乎缺乏关于正确 最佳方法

随机推荐

  • 如何在Ubuntu 14.04上挂载HDFS

    所以 我无法在 Ubuntu 14 04 上挂载 HDFS Mucommander 不工作 保险丝不工作 有人可以用图像解释我或给我一些教程 谢谢 最诚挚的问候 我今天成功地使用了Cloudera 网站上的说明 wget http arch
  • 当该文件作为卷挂载时,pgpass 文件在 pgadmin4 docker 容器中的位置

    我正在使用下面的图片https hub docker com r dpage pgadmin4 在 Ubuntu 18 04 上设置 pgAdmin4 我已经安装了一个卷 其中包含pgpass文件 这也是chmod为了pgadmin正如您在
  • Android Studio 3.3.2 中无法检测adb版本、adb输出

    我已经完成了以下任务来解决问题 下载并更新平台工具 更改Sdk路径并重新下载 重新安装后卸载了Android Sdk平台工具和Android Sdk工具 更新环境中的 adb 路径 更改虚拟内存大小 但它仍然无法正常工作 我正在使用 and
  • Emacs、unicode、xterm 鼠标转义序列和宽终端

    简短版本 当使用 emacs 的 xterm mouse mode 时 有人 emacs bash xterm 拦截 xterm 的控制序列并将其替换为 0 这对于宽显示器来说是一个痛苦 因为只有前 223 列有鼠标 罪魁祸首是什么 我该如
  • 如何将openssl生成的RSA私钥导入AndroidKeyStore

    我想将密钥导入到 AndroidKeyStore 中 所以 我可以通过 openssl 按以下方式生成它 openssl rsa text in privateKey2048 pem openssl pkcs8 topk8 inform P
  • Python:我试图找到列表中两个元素之间的最大差异

    我需要找到列表中任意两个元素之间的最大差异 在列表中 1 2 3 4 5 使用 for 循环时 最大差异为 4 元素 1 和 5 之间 该程序需要输出这两个元素 0和4 的位置及其值 1和5 我只能弄清楚如何找到连续值之间的最大差异 但是如
  • 如何告诉 CMake 在编译我的源代码之前下载外部项目

    我有自己的代码 它依赖于第三方库 例如 yaml cpp 我想在编译我自己的源代码之前下载这些第三方库 但是 我无法使用 CMake 做到这一点 我成功下载了 yaml cpp 如下所示 ExternalProject Add yaml c
  • 接口(接口/抽象类)不是抽象?

    最近 我一直在阅读一些帖子 其中讨论了接口是抽象这一假定的错误观念 其中一篇文章是http blog ploeh dk 2010 12 02 InterfacesAreNotAbstractions aspx 我有一点困惑 如果我没有接口
  • Pandas read_excel 百分比作为字符串

    我的 Excel 工作表有一列用百分比符号存储的百分比 例如 50 我该如何胁迫pandas read excel读取字符串 50 而不是将其转换为浮点数 目前read excel实现将百分比解析为浮点数 0 5 另外如果我添加一个conv
  • 何时使用存根和模拟?

    我一直有这样的困惑 如果我编写一个使用假代码来断言某些操作的代码 那么当它真正使用真实对象而不是假对象启动时 我如何信任我的真实实现 例如 我有这样的代码 Test public void CanCreateContactsWithData
  • Linq - 如何从仅包含另一个列表的项目的列表中选择项目?

    我有这两门课 public class Item public int Id get set public List
  • Tomcat 会话超时 web.xml

    这是我的 web xml 文件 它位于WEB INF lib 它指定会话超时时间为 1 分钟 但用户活动 1 分钟后不会超时 Web xml
  • Laravel 嵌套关系

    我无法让非常嵌套的关系在 laravel 中正常工作 想要的行为如下 我通过 ID 选择一个事件 并且想查看哪些人订阅了该事件 现在的问题是事件和人之间有一些表 这是有效的查询 SELECT persons id persons first
  • 在单个标签中使用多种字体颜色

    有没有办法在 iOS 的单个标签中使用两种甚至三种字体颜色 如果使用文本 你好 你好吗 作为示例 那么 你好 将是蓝色的 而 你好吗 将是绿色的 这可能吗 看起来比创建多个标签更容易 参考这里 首先初始化你NSString and NSMu
  • 使用 Npgsql postgres 和 C# 更新命令

    我创建了一个搜索表单来根据称为许可证 ID 的搜索值来查找记录 我能够提取该值的所有字段 我的问题是我正在尝试更新该记录的任何字段 例如 如果我想更新所有这些字段值都在文本框中的地址字段或邮政编码字段 我在 Lname 处或附近遇到语法错误
  • 如何在 Meteor 1.0 中使用 jQuery

    我正在尝试在meteor js 应用程序中使用像这样的jquery JS if Meteor isClient Meteor startup function button click function p toggle 或者没有meteo
  • 相当于 Python 文件的移动百分比

    对于带有以下语言的语言 为了表示块 vim 拥有全能的 钥匙 python代码的等效运动是什么 或者至少以相同的缩进移动到下一行 上一行 The vim wiki建议绑定 例如 nnoremap
  • 如何将 javafx 8 滚动窗格的内容居中

    我有一个 ScrollPane 其中包含一个 GridPane 其中包含一个 ImageView 其中包含一个 Image 我想要的是图像在 GridPane 中居中 如果没有 ScrollPane 我可以使用 setAlignment P
  • 按多个条件子集

    也许这是基本的东西 但我找不到答案 我有 Id Year V1 1 2009 33 1 2010 67 1 2011 38 2 2009 45 3 2009 65 3 2010 74 4 2009 47 4 2010 51 4 2011 1
  • STAThread 和多线程

    来自 MSDN 关于 STAThread 的文章 指示应用程序的 COM 线程模型是单线程单元 STA 作为参考 那就是整篇文章 单线程公寓 好吧 这超出了我的理解范围 另外 我在某处读到 除非您的应用程序使用 COM 互操作 否则该属性实