Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ winrt 如何在C+中正确调用CanvasBitmap::LoadAsync+/WinRT Win2D应用程序_C++ Winrt_Win2d_Winui 3 - Fatal编程技术网

C++ winrt 如何在C+中正确调用CanvasBitmap::LoadAsync+/WinRT Win2D应用程序

C++ winrt 如何在C+中正确调用CanvasBitmap::LoadAsync+/WinRT Win2D应用程序,c++-winrt,win2d,winui-3,C++ Winrt,Win2d,Winui 3,在我的WinUI3(C++/WinRT)应用程序中,我有一个要在其中绘制图像的Win2D。在画布初始化时使用加载。我很难用C++的协同程序来处理这个问题。 相关代码如下所示 //MainWindow.xaml //MainWindow.xaml.cpp MainWindow::MainWindow() { 初始化组件(); //Sprite是一个自定义类,而pSprite是MainWindow类中唯一的_ptr pSprite=std::使_唯一(float2{300.0f,300.0f},5

在我的WinUI3(C++/WinRT)应用程序中,我有一个要在其中绘制图像的Win2D。在画布初始化时使用加载。我很难用C++的协同程序来处理这个问题。 相关代码如下所示

//MainWindow.xaml
//MainWindow.xaml.cpp
MainWindow::MainWindow()
{
初始化组件();
//Sprite是一个自定义类,而pSprite是MainWindow类中唯一的_ptr
pSprite=std::使_唯一(float2{300.0f,300.0f},50.0f,60.0f);
}
void MainWindow::mainCanvas_Draw(常量画布控件和发送器、常量画布抽屉目标和参数)
{
pSprite->Update();
pSprite->Draw(args、spriteBitmap);
}
void MainWindow::mainCanvas\u CreateResources(CanvasControl常量和发送器,winrt::Microsoft::Graphics::Canvas::UI::CanvasCreateResourcesEventArgs常量和参数)
{
args.TrackAsyncAction(CreateResourcesAsync(发送方));
}
IAsyncation主窗口::CreateResourcesAsync(CanvasControl常量和发送方)
{
//spriteBitmap是MainWindow类的成员变量
spriteBitmap=co_wait CanvasBitmap::LoadAsync(发送方,Uri(L“ms-appx:///Assets/sprite.png"));
}
当我用上面的代码运行应用程序时,会抛出一个异常,消息是“应用程序调用了为不同线程封送的接口”


非常感谢您提供有关如何在WinUI(C++/WinRT)中处理异步操作的指导

什么不起作用?预期的行为是什么?观察到的行为是什么?您绝对需要解决的一件事是去掉
const
引用。您需要将参数按值传递到协同程序中。如果你不这样做,你会得到悬空的指针。@I不可检测我编辑了这个问题。我希望看到canvascontrol中显示的位图,但却引发了一个异常。我发现了一个类似的报告异常。您可以参考中的更新UI。我确实记得位图对于使用它们的线程非常特别。它必须始终是创建位图的同一线程。那是一个很早以前的故事,我从来没有完全理解过它的线程亲和力。也许Win2D是类似的。尝试使用返回的waitable中的
get()
方法使
LoadAsync
调用阻塞。