与 MAPI 后台处理程序交互

适用于:Outlook 2013 | Outlook 2016

IXPLogon : IUnknown 接口中的方法在调用传输提供程序时由 MAPI 后台处理程序使用。 大多数类型的传输提供程序应该可以实现其中大多数方法,以便它们快速返回。 这是可取的,因为如果方法需要很长时间才能返回,则应通过调用回 MAPI 后台处理程序来释放其他任务的 CPU 来将其分解。

MAPI 后台处理程序执行其工作,并在前台应用程序空闲时调用传输提供程序。 在传输提供程序首次登录时(可选)显示对话框 (受从 MAPI 传递到传输提供程序) 的标志控制后,传输提供程序在后台运行,除非客户端调用以刷新发送和接收队列。 刷新队列是传输提供程序无需释放 CPU 的唯一时间,并且仅当用户被告知正在进行可能较长的操作时。 MAPI 后台处理程序通常请求传输提供程序刷新其队列以响应用户操作,因此传输提供程序通常不需要执行任何操作来确保通知用户。

传输提供程序可以独立决定刷新队列并使用PR_STATUS_CODE (PidTagStatusCode 中的STATUS_INBOUND_FLUSH位和STATUS_OUTBOUND_FLUSH位) 状态行的属性,以通知 MAPI 后台处理程序需要注意,以便它可以完成作业。 状态行使用 IMAPISupport::ModifyStatusRow 方法更新。 在这种情况下,传输提供程序可能会显示进度指示器或其他界面,以通知用户正在执行长操作。

由于网络活动通常需要 0.2 秒以上,因此传输提供程序应尽可能使用异步网络请求。 这使他们能够发起请求,通过回调到 MAPI 后台处理程序释放 CPU,并在 MAPI 后台处理程序再次赋予他们控制权时,检查查看其网络请求是否已完成。 如果尚未完成,则再次释放 CPU,方法是使用 IMAPISupport::SpoolerYield 方法回调到 MAPI 后台处理程序。

在消息处理期间, 在 IXPLogon::SubmitMessageIXPLogon::EndMessage 之间以及 IXPLogon::StartMessage 期间,传输提供程序通常会对 MAPI 后台处理程序公开的对象进行多次调用。 作为处理这些对象的一部分,MAPI 后台处理程序通过在适当时自行生成,帮助传输提供程序以后台进程的形式适当地运行。 需要时间关键处理的传输提供程序可以使用 IMAPISupport::SpoolerNotify 支持对象方法向 MAPI 后台处理程序声明关键节。 在这种情况下,仅在传输提供程序的显式 SpoolerYield 调用上释放 CPU,直到传输提供程序通过另一次调用 SpoolerNotify 结束关键节处理。

注意

这与 Win32 关键部分不同。 仅当传输提供程序需要对外部资源(例如从传真行读取传入数据)进行实时控制时,才应执行此操作。 由于这会提高 MAPI 后台处理程序进程的优先级,并可能导致工作站在操作期间无响应,因此最好通知用户潜在的长时间操作正在进行中,并尽可能提供进度指示器。