Я создаю приложение 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 уведомления и не выбрасывается исключение.
Любые идеи?
спасибо.
Какое сообщение об исключении? – Fred
Интересно, может быть, WritableBitmap может быть создан или использован только в потоке пользовательского интерфейса (из которого фоновая задача не имеет)? –
Да, также, насколько мне известно, растровое изображение можно сделать только в потоке пользовательского интерфейса! – Depechie