共用方式為


COM+ 線程模型

COM+ 線程模型是圍繞稱為 Apartment 的物件集合所設計。 Apartment 是程式中所包含的內容集合,如下圖所示。

Diagram that shows a collection of contexts in an activity, within an apartment, within a process.

Apartment 內的通話是直接的,而跨 Apartment 的通話是間接的,而且需要 Proxy 和存根程序代碼。 Apartment 允許具有不同同步處理和重新進入屬性的物件,而且有兩個類別:單個線程和多線程。 單個線程 Apartment 中的物件會在建立它們的特定線程上執行。 STA 一次只允許執行一個方法。 它們專為使用者介面所設計,並依賴 Microsoft Windows 消息佇列來處理來電。

多線程 Apartment (MTA) 中的物件在任何線程上執行,並允許同時發生任意數目的方法。 MTA 支援隱含重新進入。

COM+ 類別會標示為 ThreadingModel 屬性,可讓 COM+ 在適當的 Apartment 中建立物件。 若要判斷對象在哪個 Apartment 中建立,CoCreateInstance 會使用 ThreadingModel 屬性。

線程必須先呼叫 CoInitializeEx ,才能使用 COM+。 這會在正確的 Apartment 和內容內建立它們。 主線程 Apartment 決定為 CoInitializeEx呼叫的第一個 STA。 這通常與進程的主要線程相關聯。 CoInitializeEx 藉由設定下列旗標,指出線程所需的 Apartment 類型:

  • COINIT_MULTITHREADED— 在單一多線程 Apartment 中找出線程。
  • COINIT_APARTMENTTHREADED— 將線程放入新的 STA。

本節中的下列主題提供在 COM+中使用線程模型和 Apartment 的詳細資訊:

進程、線程和 Apartment

ThreadingModel