我有一个 COM STA,它承载一个 ICoreWebView2。
我尝试获取完整的 HTML 块,并找到了一个文档来使用脚本实现这一点。这是我的代码:
hr = m_spWebView->ExecuteScript(L"document.body.outerHTML",
Callback<ICoreWebView2ExecuteScriptCompletedHandler>(
[&val](HRESULT hr, LPCWSTR result) -> HRESULT
{
if (SUCCEEDED(hr))
val = result;
return S_OK;
}
).Get()
);
此代码有效,但它是异步执行的。所以需要一些时间才能得到结果。事实上,我可以看到结果在下一次执行消息泵时到达(正如我对 STA 的预期)。
在 C# 中,我会使用 await 来等待完成。但是使用 C++ 没有这样的东西。使用事件是行不通的,因为我有一个 STA,我会阻塞线程并且答案永远不会到达。
有什么方法可以调用等待 C++ 完成的函数?或者另一个帮助是使用ExecuteScript
同步。