如何解决如何在 C++/WinRT Win2D 应用程序中正确调用 CanvasBitmap::LoadAsync
在我的 WinUI3(C++/WinRT) 应用程序中,我有一个 Win2D CanvasControl,我想在其中绘制图像。它在画布初始化时使用 CanvasBitmap::LoadAsync() 加载。我很难使用 C++ 协程让它工作。
相关代码如下。
// MainWindow.xaml
<Window>
<Grid>
<canvas:CanvasControl x:Name="mainCanvas"Draw="mainCanvas_Draw" CreateResources="mainCanvas_CreateResources"/>
</Grid>
</Window>
// MainWindow.xaml.cpp
MainWindow::MainWindow()
{
InitializeComponent();
// Sprite is a custom class and pSprite is a unique_ptr in the MainWindow class
pSprite = std::make_unique<Sprite>(float2{ 300.0f,300.0f },50.0f,60.0f);
}
void MainWindow::mainCanvas_Draw(const CanvasControl& sender,const CanvasDrawEventArgs& args)
{
pSprite->Update();
pSprite->Draw(args,spriteBitmap);
}
void MainWindow::mainCanvas_CreateResources(CanvasControl const& sender,winrt::Microsoft::Graphics::Canvas::UI::CanvasCreateResourcesEventArgs const& args)
{
args.TrackAsyncAction(CreateResourcesAsync(sender));
}
IAsyncAction MainWindow::CreateResourcesAsync(CanvasControl const& sender)
{
// spriteBitmap is a member variable of MainWindow class
spriteBitmap = co_await CanvasBitmap::LoadAsync(sender,Uri(L"ms-appx:///Assets/sprite.png"));
}
当我使用上述代码运行应用程序时,抛出异常并显示消息“应用程序调用了为不同线程编组的接口。”。
非常感谢有关如何在 WinUI (C++/WinRT) 中处理异步操作的指导!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。