Как следует использовать RenderTargetBitmap?

В приложении Windows Universal App (WinRT) я пытаюсь получить растровое изображение текущей страницы (или ее части).

Поиск в Google показал, что я должен использовать класс Windows:: UI:: Xaml:: Media:: Imaging:: RenderTargetBitmap (точнее, его метод RenderAsync()) для захвата экрана.

В небольшом примере приложения я добавил следующий код (C++):

auto pclRenderTargetBitmap = ref new Windows::UI::Xaml::Media::Imaging::RenderTargetBitmap;
Concurrency::create_task(pclRenderTargetBitmap->RenderAsync(pclElem,100,100)).then([&]() {
  // handling code here
});

(pclElem - это FrameworkElement, точнее холст, и не ноль)

Когда я выполняю этот код, задача действительно создается, но лямбда в "тогда" никогда не вызывается. Как будто RenderAsync() никогда не завершается.

У кого-нибудь есть опыт использования этой функции в C++? Что мне не хватает?

Спасибо за ваши ответы.

1 ответ

Решение

Спасибо Энди Ричу за его ответ. Проблема заключалась в том, что pclRenderTargetBitmap выходил из области видимости. Это может быть решено путем передачи лямбда-параметров по значению:

auto pclRenderTargetBitmap = ref new  Windows::UI::Xaml::Media::Imaging::RenderTargetBitmap;
Concurrency::create_task(pclRenderTargetBitmap->RenderAsync(pclElem,100,100)).then([=]() {
      // handling code here
});
Другие вопросы по тегам