InvalidOperationException with MediaLibrary pictures
本文关键字:pictures MediaLibrary with InvalidOperationException | 更新日期: 2023-09-27 18:11:12
我有一个windows手机应用程序,有时会得到invalidoperationexception,但不确定为什么以及如何避免它们。错误报告中的问题函数是Microsoft.Xna.Framework.Media.MediaLibraryEnumerator_1[[System.__Canon,_mscorlib]].get_Item
,我得到这个stacktrace
"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;
}
谢谢你的建议
不是真正的一个答案,但如果错误是一个,第一个foreach
和try
在第二个它没有捕捉到异常将try
放在
try
{
var root = new MediaLibrary().RootPictureAlbum;
我也有同样的问题。少数用户也会出现同样的崩溃。这是一个非常有趣的问题,我相信这是与WP8,而不是你的代码。最后,我设法在设备上重现它,但只有在调试器分离时才会发生。有两件事你需要确定。
-
album.pictures
不为空 - 如果枚举
album.Pictures
,请尝试使用album.Pictures.OrderBy(x=>x.Date);
我知道这看起来很奇怪,但是这个解决方法是有效的。
我今天在我的WP 8.0应用程序中遇到了这个异常。用户在自定义控件中获得他的"Camera Roll"媒体库的几个缩略图。当他选择其中一个缩略图时,我试图通过"GetImage()"获得真实图像。缩略图工作得很好,但是GetImage()抛出了异常。显然(这是我的猜测)一些图片已经损坏或损坏。它从来没有对他们起作用,但其他图片没有问题。
所以请记住,它也可能是一个损坏或损坏的文件。