我有一个Windows手机应用程序,有时会得到InvalidOperationExceptions但不确定为什么以及如何避免它们。
错误报告中的问题函数是Microsoft.Xna.Framework.Media.MediaLibraryEnumerator_1[[System.__Canon,_mscorlib]].get_Item
,我得到了这个堆栈跟踪
"Frame Image Function Offset
0 Microsoft.Xna.Framework.ni.dll Microsoft.Xna.Framework.Media.MediaLibraryEnumerator_1[[System.__Canon,_mscorlib]].get_Item 0x0003e4d8
1 Microsoft.Xna.Framework.ni.dll Microsoft.Xna.Framework.Media.MediaLibraryEnumerator_1[[System.__Canon,_mscorlib]].System.Collections.IEnumerator.get_Current 0x00000006
2 Microsoft.Xna.Framework.ni.dll Microsoft.Xna.Framework.Media.MediaLibraryEnumerator_1[[System.__Canon,_mscorlib]].System.Collections.Generic.IEnumerator_T_.get_Current 0x0000001c
3 MapLense.ni.DLL MapLense.Helper.PictureMapping.Add 0x000000a8
4 MapLense.ni.DLL MapLense.Helper.PictureMapping+_GetPicture_d__b.MoveNext 0x000000f6
5 mscorlib.ni.dll System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess 0x00216c46
6 mscorlib.ni.dll System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification 0x0000003a
7 mscorlib.ni.dll System.Runtime.CompilerServices.TaskAwaiter_1[[System.__Canon,_mscorlib]].GetResult 0x0000001c
8 MapLense.ni.DLL MapLense.Helper.Map+_AddPictureToMap_d__17.MoveNext 0x00000118
9 mscorlib.ni.dll System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess 0x00216c46
10 mscorlib.ni.dll System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification 0x0000003a
11 mscorlib.ni.dll System.Runtime.CompilerServices.TaskAwaiter_1[[System.__Canon,_mscorlib]].GetResult 0x0000001c
12 MapLense.ni.DLL MapLense.MainPage+_ViewModelOnPropertyChanged_d__1e.MoveNext 0x00000204
13 mscorlib.ni.dll System.Runtime.CompilerServices.AsyncMethodBuilderCore._ThrowAsync_b__0 0x00000036"
我还尝试在代码块周围添加try-catch块,但没有结果
public static bool Add(DBPicture dbpicture)
{
if (Pictures.ContainsKey(dbpicture.UniqueID))
return true;
var root = new MediaLibrary().RootPictureAlbum;
foreach (var album in root.Albums)
{
if (album.Name != AppResources.CameraRollAlbumName) continue;
for (var i = 0; i < album.Pictures.Count; i++)
{
try
{
var picture = album.Pictures[i];
if (picture.Name == dbpicture.UniqueID)
{
Pictures.Add(picture.Name, picture);
DBPictures.Add(picture.Name, dbpicture);
return true;
}
}
catch (System.Exception e)
{
#if DEBUG
Logger.WriteLine("PictureMapping.Add(DBPicture)");
Logger.WriteLine(e);
#endif
}
}
}
return false;
}
感谢您的任何建议
答案 0 :(得分:1)
不是真正的一个答案,但如果错误是第一个foreach
而try
是第二个,那么就没有抓住异常将try
放在
try
{
var root = new MediaLibrary().RootPictureAlbum;
答案 1 :(得分:0)
我有同样的问题。少数用户的崩溃相同。这是一个非常有趣的问题,我相信这是WP8,而不是你的代码。最后,我设法在一台设备上重新编写它,但只有在调试器被分离时才会发生。你需要确定两件事。
album.pictures
不为空album.Pictures
尝试类似album.Pictures.OrderBy(x=>x.Date);
我知道它看起来很奇怪,但这种解决方法有效。
答案 2 :(得分:0)
我今天在WP 8.0应用程序中遇到了这个例外。 用户获得他的&#34;相机胶卷&#34;的几个缩略图。自定义控件中的媒体库。当他选择其中一个缩略图时,我试图通过&#34; GetImage()&#34;来获得真实的图像。 缩略图工作正常,但GetImage()抛出了异常。 显然(这是我的猜测)一些照片是腐败或损坏的。它从来没有与他们合作,但其他图片没有问题。
请记住,它也可能是损坏或损坏的文件。