我将使用WUA API并以这种方式开始执行异步更新搜索:
CComPtr<SearchCallbackImpl> iscc_; <<-- Note you need to CreateInstance
CComPtr<ISearchJob> pUpJob_;
pUpJob_ = NULL;
pUpSearcher_->BeginSearch(
CComVariant(criteria.c_str()).bstrVal,
iscc_,
CComVariant(L"Scanning"),
&pUpJob_);
当我需要停止我的程序,但ISearchJob尚未完成时,我使用以下代码:
if (pUpJob_)
{
CComVariant isStopped;
pUpJob_->get_IsCompleted(&isStopped.boolVal);
if (isStopped.boolVal == VARIANT_FALSE)
{
if (SUCCEEDED(pUpJob_->RequestAbort()))
{
pUpJob_->CleanUp();
pUpJob_.Release();
}
}
}
通常这段代码可以工作,但有时它会挂起pUpJob_->CleanUp();
,我无法正确停止我的程序。
所以我的问题是:
- 停止异步搜索作业以进行更新的正确方法是什么?
- 我也误解了ISearchJob::CleanUp和ISearchJob::RequestAbort之间的区别以及如何使用此方法正确停止异步搜索?
- 这些方法应该一起使用还是单独使用?