首页 > 解决方案 > 如何解决由于 Outlook 加载项中的后台线程而导致的挂起问题

问题描述

我正在为 Outlook 编写加载项(插件)。我的插件中需要一个线程来在 Outlook 的整个生命周期内保持运行,以处理各种事件并异步执行网络操作。

我为此编写了一个后台线程,它有无限循环来保持这个线程活着。它在正常情况下工作良好。但是在以下情况下,这会使前景变得迟钝:-

步骤 1- 让 Outlook 运行。第 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 没有响应并且该线程正在运行。有人可以帮我在这里做错什么吗?

标签: c++multithreadingoutlook-addin

解决方案


推荐阅读