在为 Windows Phone 8.0 silverlight 应用程序生成锁屏图像时,我使用以下代码:
fileName = Guid.NewGuid() + ".jpg";
using (var iso = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var isostream = iso.CreateFile(fileName))
{
Extensions.SaveJpeg(bmp, isostream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
isostream.Close();
}
}
当我运行应用程序或通过后台任务(假设锁定屏幕设置已打开)时,这绝对可以正常工作。
我最近添加了在启动应用程序时运行的代码,以删除以前的锁屏图像以提高存储效率。
这是 App.xaml.cs 中使用的代码:
using (var iso = IsolatedStorageFile.GetUserStoreForApplication() )
{
foreach (string file in GetAllFiles("*.jpg", iso))
{
iso.DeleteFile(file);
}
iso.Dispose();
}
GetAllFiles 方法复制自:http: //msdn.microsoft.com/en-us/library/zd5e2z84%28v=vs.110%29.aspx。
调试时可以正常工作;自上次启动应用程序以来创建的所有锁屏图像都将被成功删除。需要明确的是,应用程序存储的唯一 jpg 是锁屏图像。
但是,问题是每当我确实包含此删除操作时,锁定屏幕图像从那一刻起停止更新。每当尝试更新它时,我都会收到此异常:
System.IO.IsolatedStorage.IsolatedStorageException:IsolatedStorageFileStream 上不允许操作。在 System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(字符串路径,FileMode 模式,FileAccess 访问,FileShare 共享,Int32 bufferSize,IsolatedStorageFile isf)在 System.IO.IsolatedStorage.IsolatedStorageFile.OpenFile(字符串路径,FileMode 模式)...
要记住几件事:
1) 每当应用程序启动时,删除操作首先在 App.xaml.cs 中运行,而锁定屏幕图像稍后由视图模型更新(这是针对天气应用程序,因此新的锁定屏幕图像返回天气后创建)。
2) 删除操作仅在应用主动打开且锁屏设置开启时执行;在后台任务中根本不会调用它。
奇怪的是,当我重新安装应用程序时,默认情况下锁屏设置是关闭的。当我打开锁定屏幕时,锁定屏幕图像已成功创建。如果我关闭应用程序并且从不重新启动它(因此从不调用删除操作代码),则锁定屏幕图像永远不会更新,因为后台任务会遇到相同的先前引用的异常。
如果我按照完全相同的步骤但在 App.xaml.cs 中没有删除操作代码,则锁屏图像每次都会成功更新。
3)动态磁贴继续更新,没有任何问题,无论是在应用程序启动时还是在后台任务中(它与锁定屏幕共享)。
任何想法这里发生了什么,我能做些什么来解决这个问题?