我要使用WUA API https://msdn.microsoft.com/en-us/library/windows/desktop/aa387099(v=vs.85).aspx并以这种方式开始执行异步搜索更新:
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_);
当我需要停止我的程序时,但是我搜索工作 https://msdn.microsoft.com/en-us/library/windows/desktop/aa386070(v=vs.85).aspx还没有完成,我使用这段代码:
if (pUpJob_)
{
CComVariant isStopped;
pUpJob_->get_IsCompleted(&isStopped.boolVal);
if (isStopped.boolVal == VARIANT_FALSE)
{
if (SUCCEEDED(pUpJob_->RequestAbort()))
{
pUpJob_->CleanUp();
pUpJob_.Release();
}
}
}
一般来说,这段代码可以工作,但有时它会挂起pUpJob_->CleanUp();
而且我没有能力正确停止我的程序。
所以我的问题是:
- 正确的停车方法是什么异步搜索更新作业 https://msdn.microsoft.com/en-us/library/windows/desktop/aa386070(v=vs.85).aspx?
- 我也误解了两者之间的区别ISearchJob::清理 https://msdn.microsoft.com/en-us/library/windows/desktop/aa386072(v=vs.85).aspx and ISearchJob::请求中止 https://msdn.microsoft.com/en-us/library/windows/desktop/aa386076(v=vs.85).aspx以及如何使用此方法正确停止异步搜索?
- 这些方法应该一起使用还是单独使用?
RequestAbort()
也是异步的(名称中暗示了这一点)。调用后,你应该调用pUpSearcher_->EndSearch()
;它将返回一个 ISearchResultResultCode
等于orcAborted
如果堕胎成功。Then你可以释放你的资源。
我不完全确定如何CleanUp()
应该使用,但是这一页 https://msdn.microsoft.com/en-us/library/windows/desktop/aa385820(v=vs.85).aspx似乎暗示它适用于具有回调的脚本,并且您不应该调用CleanUp()
从回调中。不确定您的取消代码在哪里运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)