任何一个WPF程序,Main方法前必须有一个[STAThread]特性,否则编译会失败。这个特性用来申明该应用程序的初始线程模型为STA,以便和COM兼容。STA是.NET之前,旧的COM年代的词汇。

STA: Single-Thread Apartment, 中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败。

MTA: Mutil-Thread Apartment,中文叫多线程套间。COM库在进程中创建一个内存结构,这个内存结构在整个进程中只能有一个,然后让它和调用CoInitializeEx的线程相关联。支持MTA的COM对象可以在任意线程里被使用。多有针对它的调用都会被封装成为消息。

其实STA和MTA是COM规定的一套线程模型,用于保障多线程情况下你的组件代码的同步。比如说有一个COM对象它内部有一个静态变量 gHello,那么这个对象无论生成多少实例对于gHello在内存中只能有一份,那么如果有两个不同的实例在两个线程里面同时去读写它,就有可能出错,所以就要就要有种机制进行同步保护,STA或者MTA就是这种机制。

http://hi.baidu.com/hanyidai/item/55fc974e0b35282310ee1e09

线程sta模式_STA和MTA线程模式的区别相关推荐

  1. 线程池模式比较-------ICE线程池模型------L/F领导者跟随者模式

    程池模式一般分为两种:L/F领导者与跟随者模式.HS/HA半同步/半异步模式. HS/HA 半同步/ 半异步模式 :分为三层,同步层.队列层.异步层,又称为生产者消费者模式,主线程处理I/O事件并解析 ...

  2. 内核和用户模式下进程与线程创建

    文章目录 内核模式下进程与线程的创建 进程创建 线程创建 用户模式下进程与线程的创建 内核模式下进程与线程的创建 进程创建 在内核模式中,一个进程的创建是从函数NtCreateProcess开始的.该 ...

  3. Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  4. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  5. 跟踪线程 深度 双目初始化位姿 运动模型 关键帧模式 重定位 局部地图跟踪 关键帧

    /** * This file is part of ORB-SLAM2. * * * mpMap就是我们整个位姿与地图(可以想象成ORB-SLAM运行时的那个界面世界), * MapPoint和Ke ...

  6. android并发命令,Android开发实践:基于命令模式的异步任务线程

    关于Android的异步操作,我在文章<Android开发实践:线程与异步任务>中介绍了两种方法,一种是采用线程,另一种是采用AsyncTask,今天再深入探讨下另一种模型:命令式的异步任 ...

  7. C# 多线程模式 关闭/退出全部线程

    摘要: 今天使用VS调试一个Http服务器,其中使用了多个Thread来多线程处理Request,发现在调试模式下,关闭程序时,VS还处于调试模式,猜测是因为有Thread没有结束 Google 一下 ...

  8. 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来

    题目要求: 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来.(这是一道百度面试的算 ...

  9. [.Net线程处理系列]专题二:线程池中的工作者线程

    目录: 一.上节补充 二.CLR线程池基础 三.通过线程池的工作者线程实现异步 四.使用委托实现异步 五.任务 六.小结 一.上节补充 对于Thread类还有几个常用方法需要说明的. 1.1 Susp ...

最新文章

  1. 使用SDL打造游戏世界之入门篇 - 1
  2. hibernate 7大主键生成策略详解与对象状态
  3. leetcode初级算法4.只出现一次的数字
  4. 解析云原生与云计算本质区别,别再傻傻分不清楚了!
  5. php模板技术 实例
  6. CustomValidator,客户端,服务器端验证
  7. Cygwin Application initialization failed: no display name and no $DISPLAY environment
  8. springboot细节挖掘(jar和war打包)
  9. 预培训个人项目(地铁线路规划)
  10. “一学就会”微服务的架构模式
  11. 通过IPv4网络访问IPv6网络 ISATAP隧道配置方法
  12. Activity (一)工作流简介 :概念与由来
  13. 【会议记录】0305
  14. 学习笔记(01):10小时掌握区块链开发教程-2小时构建以太坊智能合约-1
  15. 修改Windows用户名后用户路径没有修改的解决方案
  16. java 解析json数据流的几种方式
  17. win2008服务器系统玩红警,如何让Win8顺利兼容红警2
  18. 一周侃 | 周末随笔
  19. activex html 崩溃_网站导致浏览器崩溃的原因总结(多款浏览器)
  20. 教程篇(5.4) 03. FortiManager 设备注册 ❀ Fortinet 网络安全专家 NSE5

热门文章

  1. Spring所有注解大揭秘
  2. 师傅带徒弟学:Python Web之Flask框架-关东升-专题视频课程
  3. Python适合0基础菜鸟学吗
  4. 写在工作的第十年: 谈一谈专注和基础的重要性
  5. 正交投影与弱透视投影
  6. IDM 下载器 使用记录
  7. 为什么大家要支持微信和支付宝
  8. Camtasia Studio 6录制视频时鼠标闪烁的解决办法
  9. 巨细!小姐姐告诉你关于 BeautifulSoup 的一切(上)!
  10. Unix/Linux编程:解析路径名------realpath()