Как отобразить удаленное сообщение электронной почты? - PullRequest
0 голосов
/ 05 февраля 2010

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

Спасибо всем заранее.

1 Ответ

0 голосов
/ 05 февраля 2010

Прежде всего, я бы попытался удалить CMsvOperationWait и обработать открытый запрос асинхронно - то есть иметь активный объект, ожидающий завершения CMsvOperation.

CMsvOperationWait является не чем иным, как удобством, чтобы асинхронная операция выглядела синхронной, и я подозреваю, что это является причиной - в случае загрузки -> показать сообщение, две цепочки асинхронных операций связаны друг с другом.

...