Я использовал этот код для отображения сообщений 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 5th edition.
Спасибо всем заранее.