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

我的功能是这样的:

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

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

最佳答案

concurrency::create_async 仅在C++ / CX中可用(文档中可能没有明确说明,但是所有可能的返回类型都是hat类型,表明它仅在C++ / CX中可用)。

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

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

关于c++ - 无法与WRL WinRT组件一起使用create_async(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12890841/

10-11 00:39