Я пытаюсь использовать RenderTargetBitmap
, чтобы получить скриншот окна Windows Hosted Web App (HWA), но я не могу создать его экземпляр при обработке запроса от веб-приложения Javascript, запущенного в приложении HWA:
public async Task<IBuffer> CaptureScreenshotToFileAsync(uint thumbnailWidth, uint thumbnailHeight, string fileName)
{
// Throws RPC_E_WRONG_THREAD
RenderTargetBitmap screenshotBitmap = new RenderTargetBitmap();
// Assumed that this was a background thread, but...
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
// Surprisingly same thread as above, naturally also throws RPC_E_WRONG_THREAD
RenderTargetBitmap screenshotBitmap = new RenderTargetBitmap();
});
}
В обоих случаях это выбрасывается:
System.Exception: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
at Windows.UI.Xaml.Media.Imaging.RenderTargetBitmap..ctor()
Кстати, если я делаю следующее из фонового потока в стандартном приложении UWP, он работает как положено:
public MainPage()
{
// UI thread
Task.Run(() => {
// Background thread
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
{
// Back in UI thread.
RenderTargetBitmap targetBitmap = new RenderTargetBitmap(); // doesn't throw.
}
});
}
Кто-нибудь может объяснить:
- Почему не удается создать экземпляр
RenderTargetBitmap
в потоке "UI" в приложении HWA? - Почемувеб-запрос от Javascript обрабатывается потоком "UI" приложения HWA (бонус)?