使用 C++/WinRT 将 InMemoryRandomAccessStream 的内容读入缓冲区

Reading content of a InMemoryRandomAccessStream into a Buffer using C++/WinRT

提问人:mynameisroh 提问时间:2/6/2023 最后编辑:mynameisroh 更新时间:2/6/2023 访问量:70

问:

我正在尝试序列化 .Microsoft提供了非常方便的ISF格式来执行此操作。 现在,我想将 InkStrokeContainer 的内容存储到一个对象中,如下所示:winrt::Windows::UI::Input::Inking::InkStrokeContainerwinrt::Windows::Storage::Streams::Buffer

// This code is running in a worker thread
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::UI::Input;
using namespace winrt::Windows::UI::Input::Inking;
using namespace winrt::Windows::Storage::Streams;


InkStrokeContainer inkContainer;

// Add some strokes to the inkContainer

InMemoryRandomAccessStream stream;
inkContainer.SaveAsync(stream, InkPersistenceFormat::Isf).get();

Buffer buffer(stream.Size());
stream.ReadAsync(buffer, buffer.Capacity(), InputStreamOptions::None).get();

std::cout << "Buffer size: " << buffer.Length() << "Stream size: " << stream.Size() << std::endl;

但是,此代码不起作用,最后一行的输出始终为:

缓冲区大小:0 流大小:1102

似乎没有任何东西被写入缓冲区,我无法弄清楚为什么。

C++ Windows IO C++-WinRT

评论

0赞 Roy Li - MSFT 2/6/2023
ReadAsync是一种异步方法。请尝试使用 co_await 关键字等待它完成。
0赞 mynameisroh 2/6/2023
但是我正在调用 .get(),这意味着该函数将等到它完成,因此不再是异步的,对吧?
0赞 Roy Li - MSFT 2/7/2023
使用 应该是在 C++-winrt 中调用异步方法的一般方法。你可以试一试。co_await
0赞 Roy Li - MSFT 2/9/2023
对你有用吗?co_await

答: 暂无答案