08 2013 档案
摘要:前面写过两篇文章Async和Await异步编程的原理和.NET中STAThread和MTAThread。一个关于.NET异步编程,一个关于COM公寓模型,在这两篇文章中都涉及到了一个线程让另一个线程执行指定代码的问题,而这个问题其实是.NET异步编程和COM运行中非常核心的问题,因此有必要进一步讨论。对于一个线程让另一个线程执行指定代码这个过程是否有标准的名称或叫法,我确实不知道(请大家多多指教),为了方便,我将其称为跨线程委托执行。1. 什么是跨线程委托执行为了给出一个更一般的定义,我们假设有一个程序,该程序有一个函数F,该程序运行时有两个处于运行状态的线程T1和T2。T1执行到某一位置,需
阅读全文
摘要:本文讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别。1. COM中的公寓1.1 基本规则公寓是COM组件的运行环境,日常生活中公寓是用来住人的,COM中的公寓是用来住COM组件的对象的,每个COM对象必须且只能位于一个公寓中:单线程公寓(STA)或多线程公寓(MTA)。每个进程可以有0或多个STA。每个进程可以有0或1个MTA。一个线程只能关联到一个公寓。因此所有关联到MTA的线程都是关联到进程唯一的一个MTA。本线程访问与本线程关联的STA中的COM对象不需要列集,直接访问。其他线程对STA中的COM对象的访问需要列集(
阅读全文