我正在为 Windows Phone 7 编写一个应用程序,其中我将图像保存到独立存储。当我加载它们时,我无法关闭打开的图像流,因为我的程序的其他部分需要能够读取它们才能正确显示图像。当我准备好删除/更改隔离存储中的文件本身时,我只想关闭这些流。
但是,当我准备好删除这些图像时,我不再能够访问我在打开它们时使用的本地 IsolatedStorageFileStream 变量。
此时有没有办法以某种方式“关闭”这些文件(除了重新启动我的应用程序)?否则我似乎无法删除它们。
这就是我将图像写入独立存储的方式:
Dictionary<string, Stream> imageDict = (Dictionary<string, Stream>)Globals.CNState["ATTACHMENT"];
foreach (string pic in imageDict.Keys)
{
Stream input = imageDict[pic];
input.Position = 0;
byte[] buffer = new byte[16*1024];
using (FileStream thisStream = myISF.OpenFile(thisDirectory + pic, FileMode.Create))
{
int read = input.Read(buffer, 0, buffer.Length);
while (read > 0)
{
thisStream.Write(buffer, 0, read);
read = input.Read(buffer, 0, buffer.Length);
}
}
}
这就是我稍后加载它们的方式(如您所见,我保持它们打开):
string[] storedImages = myISF.GetFileNames(thisDirectory);
if(storedImages.Length > 0)
{
foreach(string pic in storedImages)
{
IsolatedStorageFileStream imageStream = myISF.OpenFile(thisDirectory + pic, FileMode.Open, FileAccess.Read, FileShare.Read);
imageDict.Add(pic, imageStream);
}
}
Globals.CNState["ATTACHMENT"] = imageDict;
我无法关闭这些,因为我的应用程序的另一部分需要从它们的文件流中创建图像(这可能需要多次发生):
if (Globals.CNState != null && Globals.CNState.ContainsKey("ATTACHMENT"))
{
imageDict = (Dictionary<string, Stream>)Globals.CNState["ATTACHMENT"];
foreach (string key in imageDict.Keys)
{
Stream imageStream = imageDict[key];
Image pic = new Image();
pic.Tag = key;
BitmapImage bmp = new BitmapImage();
bmp.SetSource(imageStream);
pic.Source = bmp;
pic.Margin = new Thickness(0, 0, 0, 15);
pic.MouseLeftButtonUp += new MouseButtonEventHandler(pic_MouseLeftButtonUp);
DisplayPanel.Children.Add(pic);
}
}
我还需要保持流打开,因为我的程序的另一部分将这些图像发送到服务器,据我所知,我只能发送字节流,而不是 UIElement。