你能解释一下STA和MTA吗?

你能解释一下STA和MTA吗?

你能用你自己的话解释一下STA和MTA吗?

另外,什么是公寓线程,它们只涉及COM吗?如果是,为什么?


泛舟湖上清波郎朗
浏览 734回答 3
3回答

侃侃无极

COM线程模型称为“单元”模型,其中初始化的COM对象的执行上下文与单个线程(单线程单元)或多个线程(多线程单元)相关联。在此模型中,COM对象一旦在公寓中初始化,就会在运行时期间成为该单元的一部分。STA模型用于非线程安全的COM对象。这意味着它们不处理自己的同步。这是一个常用的UI组件。因此,如果另一个线程需要与对象交互(例如按下表单中的按钮),则消息被编组到STA线程上。Windows窗体消息泵系统就是一个例子。如果COM对象可以处理自己的同步,那么可以使用MTA模型,其中允许多个线程与对象交互,而不需要编组调用。

函数式编程

我觉得现有的解释太过分了。以下是我用简单英语所作的解释:sta:如果一个线程创建一个设置为STA的COM对象(当调用CoCreateXXX时,您可以传递一个将COM对象设置为STA模式的标志),那么只有这个线程才能访问这个COM对象(STA的意思是-单线程单元),其他试图调用这个COM对象的线程就会被悄悄地转换成将消息传递给创建(拥有)COM对象的线程。这非常类似于这样一个事实:只有创建UI控件的线程才能直接访问它。这种机制是为了防止复杂的锁/解锁操作。MTA:如果一个线程创建一个被设置为MTA的COM对象,那么几乎每个线程都可以直接调用它上的方法。这几乎就是它的要旨。虽然从技术上讲,我没有提到一些细节,比如在‘STA’段落中,创建者线程本身必须是STA。但要理解STA/MTA/NA,这是你所要知道的。
打开App,查看更多内容
随时随地看视频慕课网APP