0

Я создаю приложение Windows Phone 8.1 (Windows Runtime, а не Windows Phone Silverlight 8.1). Я создал фоновое задание, которое я запускаю с помощью триггера обслуживания. В фоновой задаче мне нужно создать WriteableBitmap с одного снимка Camera Roll. Мой код выглядит следующим образом:Windows Phone 8.1 - Исключение при создании WriteableBitmap из фоновой задачи

public sealed class Class1 : IBackgroundTask 
{ 
    public async void Run(IBackgroundTaskInstance taskInstance) 
    { 
     BackgroundTaskDeferral deferral = taskInstance.GetDeferral(); 

     var files = await KnownFolders.CameraRoll.GetFilesAsync(); 

     ShowNotification("Process has started"); 

     using(var fileStream = await files[0].OpenStreamForReadAsync()) 
     { 
      WriteableBitmap writeableBitmap = await BitmapFactory.New(1, 1).FromStream(fileStream.AsRandomAccessStream()); 
     } 

     ShowNotification("Process has ended"); 

     deferral.Complete(); 
    } 
} 

При запуске фонового задания, два уведомления работать, как ожидалось, но я получаю следующие исключения:

"A first chance of exception of type "System.Exception" occurred in WriteableBitmapEx.WinRT.DLL"" 
"A first chance of exception of type "System.Exception" occurred in mscorlib.dll" 

"The proccess has ended with code 1 (0x1)" 

Если удалить эти строки:

using(var fileStream = await files[0].OpenStreamForReadAsync()) 
{ 
    WriteableBitmap writeableBitmap = await BitmapFactory.New(1, 1).FromStream(fileStream.AsRandomAccessStream()); 
} 

Все работает должным образом, появляются 2 уведомления и не выбрасывается исключение.

Любые идеи?

спасибо.

+0

Какое сообщение об исключении? – Fred

+0

Интересно, может быть, WritableBitmap может быть создан или использован только в потоке пользовательского интерфейса (из которого фоновая задача не имеет)? –

+0

Да, также, насколько мне известно, растровое изображение можно сделать только в потоке пользовательского интерфейса! – Depechie

ответ

0

Используйте XamlRenderingBackgroundTask, чтобы генерировать графику XAML в фоновом режиме. Обратите внимание, что для этого рекомендуется использовать C++ для минимизации использования памяти.

Смежные вопросы