在我的WP7应用程序中,我正在生成一个图像,并将其保存在独立存储中以用于动态磁贴。然后,周期性任务可以使用该图像更新动态磁贴,这方面一切都正常。
但是,当我在前台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)),
});
我不确定自己是否在这里犯了一些基本错误?我正在考虑将生成的图像与其对象一起存储到数据库中。而且,在这里涉及的文件数量是可管理的。我没有生成大量的这些东西。
我有一个解决方法,就是从WP7应用程序内部更新livetile而不使用图像文件。