В моем приложении WP7 я создаю образ для активной плитки и сохраняю ее в изолированном хранилище.
Затем моя периодическая задача может обновить текущую плитку, и в этом отношении все работает нормально для периодической задачи.
Проблема, с которой я столкнулся, заключается в том, что в моем приложении WP7 на переднем плане, когда я создаю образ активной плитки, я также обновляю живую плитку (так как я знаю, что что-то изменилось, так зачем ждать периодической задачи). Но когда происходит обновление живого тайла, кажется, что он не может найти вновь созданный файл и поэтому представляет живую плитку без растрового изображения.
С точки зрения соответствующего кода
Создание файла
var source = new BitmapImage(new Uri("Images/Tiles/Class Timetable with T.png", UriKind.Relative));
source.CreateOptions = BitmapCreateOptions.None;
source.ImageOpened += (sender, e) => // This is important. The image can't be rendered before it's loaded.
{
// Create our image as a control, so it can be rendered to the WriteableBitmap.
var newImage = new Image();
newImage.Source = source;
newImage.Width = 173;
newImage.Height = 173;
// Define the filename for our tile. Take note that a tile image *must* be saved in /Shared/ShellContent
// or otherwise it won't display.
var tileImage = string.Format("/Shared/ShellContent/{0}.jpg", Event.UniqueId);
// Define the path to the isolatedstorage, so we can load our generated tile from there.
var isoStoreTileImage = string.Format("isostore:{0}", tileImage);
и сам факт сохранения
// Create a stream to store our file in.
var stream = store.CreateFile(tileImage);
// Invalidate the bitmap to make it actually render.
bitmap.Invalidate();
// Save it to our stream.
bitmap.SaveJpeg(stream, 173, 173, 0, 100);
// Close the stream, and by that saving the file to the ISF.
stream.Close();
и код, который фактически извлекает изображение и обновляет активную плитку (и работает в периодической задаче, но не из самого приложения
string imageString = "isostore:/Shared/ShellContent/" + nextEvent.UniqueId + ".jpg";
ShellTile defaultTile2 = ShellTile.ActiveTiles.First();
defaultTile2.Update(new StandardTileData
{
Title = nextTime,
BackgroundImage = (new Uri(imageString, UriKind.Absolute)),
});
Просто не уверен, что я делаю здесь что-то принципиально неправильное? Я рассматриваю возможность сохранения сгенерированного изображения в базе данных вместе с его объектом. И у меня есть управляемое количество файлов, участвующих здесь. Я не создаю сотни вещей.
У меня есть обходной путь, который заключается в обновлении livetile из приложения WP7 без использования файла изображения.