MediaLibrary图片的InvalidOperationException

时间:2013-04-29 07:43:47

标签: c# asynchronous windows-phone-8 invalidoperationexception

我有一个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;
}

感谢您的任何建议

3 个答案:

答案 0 :(得分:1)

不是真正的一个答案,但如果错误是第一个foreachtry是第二个,那么就没有抓住异常将try放在

之外
try
{
    var root = new MediaLibrary().RootPictureAlbum;

答案 1 :(得分:0)

我有同样的问题。少数用户的崩溃相同。这是一个非常有趣的问题,我相信这是WP8,而不是你的代码。最后,我设法在一台设备上重新编写它,但只有在调试器被分离时才会发生。你需要确定两件事。

  1. album.pictures不为空
  2. 相反,如果枚举album.Pictures尝试类似album.Pictures.OrderBy(x=>x.Date);
  3. 的内容

    我知道它看起来很奇怪,但这种解决方法有效。

答案 2 :(得分:0)

我今天在WP 8.0应用程序中遇到了这个例外。 用户获得他的&#34;相机胶卷&#34;的几个缩略图。自定义控件中的媒体库。当他选择其中一个缩略图时,我试图通过&#34; GetImage()&#34;来获得真实的图像。 缩略图工作正常,但GetImage()抛出了异常。 显然(这是我的猜测)一些照片是腐败或损坏的。它从来没有与他们合作,但其他图片没有问题。

请记住,它也可能是损坏或损坏的文件。