Windows UWP,在异步调用期间挂起时应用程序崩溃

时间:2016-04-29 08:57:34

标签: windows-store-apps windows-10-universal

在我的Windows商店应用程序中,我有一个等待函数,有时需要几分钟才能完成(将在其他一些线程中查询性能)。同时,如果用户将注意力集中在应用程序之外,则会崩溃。当我检查事件日志时,出现以下错误:

  

应用已终止,因为暂停时间太长。

我在应用程序中使用Prism。我已使用以下代码处理Application.Current.Suspending,但始终有以下代码:

    protected void OnApplicationSuspending(object sender, SuspendingEventArgs e)
    {
        var defferal = e.SuspendingOperation.GetDeferral();
        if (sessionStateService.SessionState.ContainsKey("plotId"))
        {
            sessionStateService.SessionState.Remove("plotId");
        }

        sessionStateService.SessionState.Add("plotId", Plot.Id);

        if (sessionStateService.SessionState.ContainsKey("Page"))
        {
            sessionStateService.SessionState.Remove("Page");
        }

        sessionStateService.SessionState.Add("Page", "OperationRecording");

        defferal.Complete();
    }

我还重写了OnNavigatingFrom函数,用于保存导航参数(并且它没有其他功能)。

    public override void OnNavigatingFrom(NavigatingFromEventArgs e, Dictionary<string, object> viewModelState, bool suspending)
    {
        if (viewModelState.ContainsKey("plotId"))
        {
            viewModelState.Remove("plotId");
        }

        viewModelState.Add("plotId", Plot.Id);

        base.OnNavigatingFrom(e, viewModelState, suspending);
    }

我无法弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:4)

如果你暂停你的应用程序,你应该在5秒内完成它 阅读Application.Suspending

  

暂停之前保存数据非常有用,因为Suspending事件   处理程序只有5秒钟来完成其操作。

因此,应用程序正常工作可以更好地保存大量数据 您还可以阅读Guidelines for app suspend and resume

在UWP中,您还可以借助扩展执行来延长暂停时间