Использование объектов Thread-Safe
Область применения: Outlook 2013 | Outlook 2016
Клиентские приложения могут предполагать, что объекты, используемые напрямую или в качестве обратных вызовов, всегда являются потокобезопасны, за исключением следующих случаев:
Объект состояния поставщика транспорта, полученный через вызов клиента IMAPISession::OpenEntry с идентификатором записи из строки таблицы состояния поставщика.
Все объекты формы MAPI, полученные посредством вызова клиента MAPIOpenFormMgr. Объекты формы подчиняются правилам модели квартир, и клиенты должны использовать их и все содержащиеся в них объекты только в потоке, который их создал.
Когда клиент обращается к строке поставщика транспорта в таблице состояния, включающей идентификатор записи связанного объекта состояния, клиент может вызвать OpenEntry с этим идентификатором записи, чтобы открыть объект состояния. Этот объект состояния не является потокобезопасной, так как поставщики транспорта выполняются в контексте диспетчера очереди MAPI и не поддерживают отдельный контекст для своего объекта состояния. Объект состояния подчиняется правилам модели квартир, и клиенты должны использовать его только в потоке, создав его.
Клиент также должен вызывать MAPIInitialize в каждом потоке перед использованием любых объектов MAPI и MAPIUninitialize , когда это использование будет завершено. Эти вызовы следует выполнять, даже если используемые объекты передаются потоку из внешнего источника. MAPIInitialize и MAPIUninitialize можно вызывать из любого места, за исключением функции Win32 DllMain , которая вызывается системой при инициализации и завершении процессов и потоков или при вызовах функций LoadLibrary и FreeLibrary .
Объекты непрямого использования никогда не должны быть потокобезопасны. Объекты непрямого использования возвращаются методами, для которых в качестве входных параметров требуются указатели интерфейса назначения. Примерами таких методов являются IMAPIProp::CopyTo и CopyProps, IMAPIFolder::CopyFolder и CopyMessage и IMsgServiceAdmin::CopyMsgService. Если поставщик услуг хочет вызвать такой объект из потока, отличного от того, в котором он был передан, поставщик несет ответственность за явное маршалирование объекта.