我有以下课程:
public class RecipeItem
{
public Guid ID { get; set; }
public string Title { get; set; }
public string Instructions { get; set; }
public string Ingredients { get; set; }
public string ImagePath {get; set;}
[XmlIgnore]
public BitmapImage ListPreview { get; set; }
}
我这样序列化:
private void SaveRecipe()
{
fileName = recipeID + ".txt";
recipe.Title = TitleBox.Text;
recipe.Ingredients = Ingredients.Text;
recipe.Instructions = Instructions.Text;
string tempJPEG = "image" + recipeID + ".jpg";
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
using (store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (store.FileExists(tempJPEG))
{
recipe.ImagePath = tempJPEG;
}
using (var file = store.CreateFile(recipe.ID + ".txt"))
{
XmlSerializer serializer = new XmlSerializer(typeof(RecipeItem));
serializer.Serialize(file, recipe);
}
}
store.Dispose();
}
最后反序列化为 ListBox 控件的 List,如下所示:
public static List<RecipeItem> CreateTestList()
{
List<RecipeItem> list = new List<RecipeItem>();
RecipeItem recipe = new RecipeItem();
//Get files from isolated store.
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
try
{
XmlSerializer serializer = new XmlSerializer(typeof(RecipeItem));
var filesName = store.GetFileNames();
if (filesName.Length > 0)
{
foreach (string fileName in filesName)
{
if (fileName == "__ApplicationSettings") continue;
using (var file = store.OpenFile(fileName, FileMode.Open))
{
try
{
recipe = (RecipeItem)serializer.Deserialize(file);
}
catch
{
}
}
using (store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (recipe.ImagePath!=null)
{
using (var stream = store.OpenFile(recipe.ImagePath, FileMode.Open, FileAccess.ReadWrite))
{
recipe.ListPreview.SetSource(stream);
recipe.ListPreview.DecodePixelHeight = 100;
recipe.ListPreview.DecodePixelWidth = 100;
}
}
}
}
}
}
catch
{
}
list.Add(recipe);
store.Dispose();
return list;
}
我在代码行中不断收到 System.AccessViolationException:
recipe.ListPreview.SetSource(stream);
基本上我在这里尝试做的是允许用户定义的图像绑定到列表框。因为不能序列化 BitmapImage,所以我将文件保存到 IsolatedStorage 中,并将路径保存到名为 ImagePath 的字符串中。当我反序列化为我的 ListBox 创建一个 List 时,我获取图像路径并打开图像文件并将其设置为 BitmapImage 的源,然后绑定到 ListBox。我的代码中的所有内容都可以正常工作,除了一行代码、序列化和反序列化都可以完美地工作,并且直接从独立存储将图像文件绑定到图像控件也可以完美地工作。
您认为可能导致 AccessViolationException 的原因是什么?
提前致谢!