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