我一直在使用此代码来显示 IMAP4 消息:
void DisplayMessageL( const TMsvId &aId )
{
// 1. construct the client MTM
TMsvEntry indexEntry;
TMsvId serviceId;
User::LeaveIfError( iMsvSession->GetEntry(aId, serviceId, indexEntry));
CBaseMtm* mtm = iClientReg->NewMtmL(indexEntry.iMtm);
CleanupStack::PushL(mtm);
// 2. construct the user interface MTM
CBaseMtmUi* uiMtm = iUiReg->NewMtmUiL(*mtm);
CleanupStack::PushL(uiMtm);
// 3. display the message
uiMtm->BaseMtm().SwitchCurrentEntryL(indexEntry.Id());
CMsvOperationWait* waiter=CMsvOperationWait::NewLC();
waiter->Start(); //we use synchronous waiter
CMsvOperation* op = uiMtm->OpenL(waiter->iStatus);
CleanupStack::PushL(op);
CActiveScheduler::Start();
// 4. cleanup for example even members
CleanupStack::PopAndDestroy(4); // op,waiter, mtm, uimtm
}
但是,如果用户尝试下载远程消息(即以前未从邮件服务器检索到的电子邮件之一),然后取消请求,我的代码仍然被阻止,并且它永远不会收到有关操作被取消的信息。
我的问题是:
- 上面的解决方法是什么,所以应用程序没有卡住?
- 任何人都可以提供一个异步调用的工作示例来打开不会恐慌和崩溃应用程序的远程消息吗?
POP3、SMTP 和本地 IMAP4 消息的异步调用完美运行,但远程 IMAP4 消息会产生此问题。
我正在为 S60 第 5 版测试这些示例。
谢谢大家。