Как решить проблему зависания из-за фоновой нити в надстройке Outlook - PullRequest
0 голосов
/ 23 декабря 2018

Я пишу надстройку (плагин) для Outlook.Мне нужен поток в моем плагине, чтобы он продолжал работать в течение всего срока службы, чтобы обрабатывать различные события и выполнять сетевые операции асинхронно.

Я написал фоновый поток для этой цели, который имеет бесконечный цикл для сохранения этогоживая нить.Это работает хорошо в нормальной ситуации.Но в следующих обстоятельствах прогноз не отвечает: -

Шаг 1 - Оставьте прогноз в рабочем состоянии.Шаг 2 - Блокировка системы Windows. Шаг 3 - Разблокировка через 1 минуту.

Когда я отключаю свой плагин из Outlook, он хорошо работает в тех же случаях.Я реализовал фоновый поток следующим образом: -

void BackgroundTaskManager::onDoWork(System::Object^ sender, 
 DoWorkEventArgs^ e)
{
 try
 {
    while (e->Cancel == false)
    {
        mRemoveList->Clear();
        for each(KeyValuePair<uint64_t, BackgroundTask^>^ task in 
          mTasks)
        {
            task->Value->checkStarted();

            if (task->Value->isComplete)
            {
                mRemoveList->Add(task->Key);
            }
        }

        for each(uint64_t taskID in mRemoveList)
        {
            mTasks->Remove(taskID);
            DarkEventLog::Debug(String::Format("Completed task 
            removed. {0}", taskID));
        }
        Sleep(1000);
        if (DarkClientManager::instance->isRunning == false)
            break;
     }
  }
  catch (System::Exception^ ex)
  {
    throw ex;
  }
}

В приведенном выше коде, даже если mtasks и mRemovelists пусты, все же я мог видеть из отпечатков, что Outlook не отвечает, и этот поток запущен.Может кто-нибудь, пожалуйста, помогите мне, что я здесь делаю неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...