C# 文件选择器在库中不断崩溃(WP 8.1 RT)

C# 文件选择器在库中不断崩溃(WP 8.1 RT),c#,windows-runtime,windows-phone-8.1,winrt-xaml,C#,Windows Runtime,Windows Phone 8.1,Winrt Xaml,我有一个Windows Phone 8.1 RT应用程序,其中我使用FilePickerAPI从库中选择图像。但是,当用户在多媒体资料中选择图像时,应用程序不断崩溃 应用程序在两种不同的情况下崩溃: 用户打开filepicker以浏览库中的图像,在浏览自身时,应用程序终止,库关闭(显示WP 8.1的主屏幕) 用户选择一些文件并按下“完成”按钮,此时应用程序开始恢复,但在恢复时失败并崩溃(显示主屏幕) filepicker在其他情况下工作正常,但上述两种崩溃持续间歇性发生。这些崩溃是否有修复方法?

我有一个Windows Phone 8.1 RT应用程序,其中我使用
FilePicker
API从库中选择图像。但是,当用户在多媒体资料中选择图像时,应用程序不断崩溃

应用程序在两种不同的情况下崩溃:

  • 用户打开filepicker以浏览库中的图像,在浏览自身时,应用程序终止,库关闭(显示WP 8.1的主屏幕)

  • 用户选择一些文件并按下“完成”按钮,此时应用程序开始恢复,但在恢复时失败并崩溃(显示主屏幕)


  • filepicker在其他情况下工作正常,但上述两种崩溃持续间歇性发生。这些崩溃是否有修复方法?

    应用程序正在崩溃,因为
    OnSuspending()
    方法花费了太多时间来完成执行。因此,操作系统不断终止应用程序

    应用程序崩溃的场景如下:

  • 将调用
    FilePicker
    API,并将用户导航到gallery视图。同时,
    OnSuspending()
    方法仍在执行,由于该方法中的
    锁需要等待,因此该方法从未返回,迫使操作系统在用户仍在gallery视图中时强制终止应用程序。操作系统的强制终止实际上也终止了
    文件选择器
    API,并且画廊视图也被关闭,用户回到了主屏幕

  • 此场景类似于上面的场景。除此之外,当多媒体资料仍然打开时,操作系统不会终止应用程序。一旦用户从库中选择了一个项目,操作系统就会开始恢复应用程序,并尝试调用
    OnResuming
    方法。但它意识到应用程序尚未终止,并且
    OnSuspending
    方法仍在执行(等待获取
    lock
    对象)。当操作系统尝试恢复尚未挂起的应用程序时,状态不匹配会导致操作系统终止该应用程序


  • 我基本上确保了
    OnSuspending
    方法快速返回以修复上述崩溃。

    看起来崩溃的发生是因为你的应用程序处理暂停/恢复的方式。当你的应用程序调用filepicker UI时,如果你的应用程序需要资源(RAM/CPU),WP将挂起它。我建议向我们提供更多关于如何处理应用程序暂停和恢复的信息。另外,您在visual studio的“输出”窗口中是否看到任何异常消息?@Flipper:您可以发布任何相同的解决方案吗?@vITs添加了一个答案。我在打开filepicker之前调用了SaveState,并在OnSuspending方法中使用了一些不调用SaveState的标志,因为状态已被保存以最小化所需时间。另外,我在OnSuspending中添加了try-catch,我是否应该删除相同的?@vITs您的文件选择器崩溃场景是否与我提到的类似(它只是间歇性崩溃,而不是每次都崩溃)?我建议您记录
    onsuspend()
    方法所花费的时间,并在
    OnResuming()方法中插入一行日志。这将使您了解崩溃是否发生在挂起之前、挂起期间、恢复期间等。是的…它大部分时间不会崩溃…但会随机崩溃…我认为保存状态需要时间,所以我在FileOpenPicker和OnSuspending事件返回标记之前立即执行此操作。除了SuspendionManager.SaveAsync()之外,我什么都没做,只是得到了延迟。当媒体在后台播放时,我在live beta build中进行应用内购买时也遇到了同样的崩溃。我在应用内购买之前停止了播放器。此崩溃不是在CurrentAppSimulator中发生的,而是在CurrentApp中发生的,因为它在启动商店产品购买之前需要网络,您遇到过这种情况吗?@vITs否,从未使用过
    CurrentAppSimulator
    API。当
    FilePicker
    暂停应用程序时,我的崩溃是一次失败的恢复。