Нестандартная проблема рендеринга плитки в Windows Phone (7/8)
В моем приложении для Windows Phone »На главной странице пользователи могут нажать на кнопку, чтобы выполнить некоторые действия, и это приведет к обновлению активной плитки.
У меня проблема, если пользователь нажимает кнопку, а затем нажимает на телефон »s Кнопка Back очень быстро, иногда живая плитка не будет отображаться правильно. Эта проблема редко случается, но это случается, и когда это случается, это только выглядит плохо ...
Я реализую живую плитку следующим образом: создайте пользовательский элемент управления, который будет выглядеть точно так же, как живая плитка, и сохраните его в изолированном хранилище. Затем извлеките его и сохраните в объекте FliptileData. Наконец, я вызываю метод Update в ShellTile. Пожалуйста, посмотрите следующий фрагмент кода, чтобы продемонстрировать процесс.
// the function that saves the user control to isolated storage
public Uri SaveJpegToIsolatedStorage(FrameworkElement tile, string suffix, int tileWidth = 336, int tileHeight = 336)
{
var bmp = new WriteableBitmap(tileWidth, tileHeight);
// Force the content to layout itself properly
tile.Measure(new Size(tileWidth, tileHeight));
tile.Arrange(new Rect(0, 0, tileWidth, tileHeight));
bmp.Render(tile, null);
bmp.Invalidate();
// Obtain the virtual store for the application
IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(IsolatedStorageFileName + suffix, FileMode.Create, myStore))
{
try
{
bmp.SaveJpeg(fileStream, tileWidth, tileHeight, 0, 100);
}
catch (Exception)
{
return null;
}
}
return new Uri("isostore:/" + IsolatedStorageFileName + suffix, UriKind.Absolute);
}
// save the user control to isolated storage and prepare the FlipTileData object
wideFrontTileImage = SaveJpegToIsolatedStorage((UserControl)this.WideFrontTile, "_wide_front", 691);
var flipTileData = new FlipTileData();
flipTileData.WideBackgroundImage = wideFrontTileImage;
return flipTileData;
// update the live tile
var shellTile = ShellTile.ActiveTiles.FirstOrDefault();
shellTile.Update(customTile.GetFlipTileData(data.UndoneMemosCount == "0" && data.TotalMemosCount == "0"));
Я думаю, что причинаВсе это вызвано тем, что, когда пользователь слишком быстро нажимает кнопку «Назад», ОС завершает все процессы, запущенные в приложении, и рендеринг не выполняется.сделано в то время. Я'Я думаю, если естьЭто способ узнать, когда рендеринг закончен, поэтому я могу отменить кнопку Назад и подождать, пока она не будетПосле завершения вручную выйдите из приложения. Но я просто не знаю, как ...
Любая помощь по этому вопросу будет принята с благодарностью!