共用方式為


使用 Thread-Safe 物件

適用於:Outlook 2013 |Outlook 2016

用戶端應用程式可以假設直接使用的對象或作為回呼的物件一律為安全線程,但下列情況除外:

  • 透過用戶端呼叫 IMAPISession::OpenEntry 取得的傳輸提供者狀態物件,其中包含提供者狀態數據表數據列的專案標識符。

  • 透過對 MAPIOpenFormMgr的用戶端呼叫取得的所有MAPI表單物件。 表單物件會遵守 Apartment 模型規則,而客戶端必須使用它們,以及它們所包含的所有物件只在建立它們的線程上。

當用戶端存取狀態數據表中包含相關聯狀態物件之專案標識碼的傳輸提供者數據列時,用戶端可以使用該專案標識元呼叫 OpenEntry 來開啟狀態物件。 此狀態物件不是安全線程,因為傳輸提供者會在MAPI多任務緩衝處理器的內容中執行,而且不會維護其狀態對象的個別內容。 狀態物件會遵守 Apartment 模型規則,而且客戶端必須只在建立它的線程上使用它。

用戶端也必須先在每個線程上叫用 MAPIInitialize ,才能使用任何MAPI物件,並在使用完成時叫用 MAPIUninitialize 。 即使要使用的物件是從外部來源傳遞至線程,也應該進行這些呼叫。 MAPIInitializeMAPIUninitialize 可以從 Win32 DllMain 函式內以外的任何位置呼叫,這是系統在初始化和終止進程和線程時叫用的函式,或在 呼叫 LoadLibraryFreeLibrary 函式時所叫用的函式。

不應將間接使用物件假設為安全線程。 間接使用物件是由需要目的地介面指標做為輸入參數的方法傳回。 這類方法的範例包括 IMAPIProp::CopyToCopyPropsIMAPIFolder::CopyFolderCopyMessage,以及 IMsgServiceAdmin::CopyMsgService。 如果服務提供者想要從傳遞的線程以外的線程呼叫這類物件,則提供者會負責明確封送處理物件。