不能将 create_async() 与 WRL WinRT 组件一起使用

Can't use create_async() with WRL WinRT component

本文关键字:WinRT WRL 组件 一起 create async 不能      更新时间:2023-10-16

我想使用 WRL 编写一个具有异步支持的 WinRT 组件,但我发现即使我包含ppltask.husing namespace concurrency create_async()也是未定义的如何使用 WRL 模式创建后台任务?

我的函数是这样的:

HRESULT GetStreamAsync([out, retval] IAsyncOperation<IRRandomAccessStream*>** operation);

我也尝试使用 IThreadPoolStatics->RunAsync() ,但似乎它只能在IAsyncAction的情况下使用并且没有返回值。有人可以帮忙吗?

concurrency::create_async只能在

C++/CX 中使用(这可能没有在文档中明确说明,但所有可能的返回类型都是帽子类型,表明它只能在 C++/CX 中使用)。

WRL

包括Microsoft::WRL::AsyncBase基类模板,您可以从中派生该模板以使用 C++ 和 WRL 实现异步操作。

我不知道包装std::futureconcurrency::task的规范实现,但您可以在 Boost 许可的 CxxReflect 库中找到一个实现示例(搜索 async_operation_basetask_based_async_operation)。