【发布时间】:2016-10-13 10:23:28
【问题描述】:
我将使用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(); 上,我无法正确停止我的程序。
所以我的问题是:
- 停止asynchronous search job for updates的正确方法是什么?
- 另外我误解了ISearchJob::CleanUp 和ISearchJob::RequestAbort 之间的区别以及如何使用这些方法正确停止异步搜索?
- 这些方法应该一起使用还是单独使用?
【问题讨论】:
标签: c++ winapi com updates wuapi