File 实时磁贴无法从独立存储中拾取图像

File 实时磁贴无法从独立存储中拾取图像,file,windows-phone-7,live,tiles,File,Windows Phone 7,Live,Tiles,在我的WP7应用程序中,我正在为活动磁贴生成一个图像,并保存在独立的存储中。 然后,我的定期任务就可以使用更新live tile了,在这方面,对于定期任务,一切都很好 我遇到的问题是,在我的前台WP7应用程序中,当我创建live tile图像时,我也会更新live tile(因为我知道某些内容已更改,所以为什么要等待定期任务)。但是,当实时磁贴更新发生在这里时,它似乎找不到新创建的文件,因此在没有位图的情况下显示实时磁贴 根据有关守则, 创建文件 var source = new BitmapI

在我的WP7应用程序中,我正在为活动磁贴生成一个图像,并保存在独立的存储中。 然后,我的定期任务就可以使用更新live tile了,在这方面,对于定期任务,一切都很好

我遇到的问题是,在我的前台WP7应用程序中,当我创建live tile图像时,我也会更新live tile(因为我知道某些内容已更改,所以为什么要等待定期任务)。但是,当实时磁贴更新发生在这里时,它似乎找不到新创建的文件,因此在没有位图的情况下显示实时磁贴

根据有关守则,

创建文件

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。

嘿,这段代码看起来很熟悉;-)除此之外,您发布的代码中没有任何东西可以确定问题

我猜您在定期任务的早期调用了
NotifyComplete()
。为此,我建议您使用任务并行库来解决这个问题

今天早上我写了一篇关于它的文章:


基本部分是确保在完成背景图像渲染并将其保存到独立存储后,首先调用
NotifyComplete()

在主应用程序中创建时,不需要路径上的
isostore:
前缀。尝试创建文件的相对URI。

您是说它不显示
背景图像
,但
标题
更新正确吗?是-没错-标题在那里,但没有背景图像。是-代码不错-谢谢!将查看您的文章,看看这是否有帮助。如果您想快速查看,只需注释掉
NotifyComplete()
,然后查看图像是否正确更新。我一直在研究这种方法,并开始按照这里的示例合并代码。如果可以的话,我只想问几个问题——首先,剩下的问题仅仅是因为使用twitter提要的示例才需要的吗?或者它是传递到UI线程时的固有特性。第二,通过这种方法,我仍然可以使用调试功能来更定期地执行周期任务——这非常方便1)是的,我使用RestSharp从Twitter获取数据。您可以用任何类型的数据源替换它。2) 是的,不应该有任何阻碍。我正在努力使您的windcape示例适应我的情况。因为在获取twitter提要“client.ExecuteTask(request)”的过程中,您创建了一个初始任务。。。然而,在我的例子中,我只是从数据库中填充一个小集合,不知道如何创建初始任务,也不知道它如何包含我的集合。我想一旦我有了它,我就可以按照你的“RunNuithRead”进行处理了“方法。但该方法依赖于在第一次调用中创建的任务。当我使用isostore:前缀创建任务时,周期性任务可以找到该文件,但主应用程序无法找到。如果我按照您的建议执行,定期任务是否能够查看该文件?
isostore:
前缀是非常必要的。实际上,这就是为什么可以创建本地平铺的原因。(忍者从我的一篇博客文章中获取了代码,所以我应该知道)不管怎样,如果文件没有创建,那么它就不会工作。因为我认为这可能是我在没有isostore:前缀的情况下尝试它时遇到的问题。所以,如果我创建的文件带有isostore:前缀,为什么主应用程序很难看到它,因为是应用程序刚刚创建了文件。我将文件保存在主应用程序中,并且应用程序和代理都可以看到这些文件,它们不使用前缀,但使用相对前缀,并且工作正常。