Windows Store App 中挂起时,程序奔溃的问题

昨天在开发windows phone 8.1程序时,发现程序在挂起的时候,会自动退出。通过调试发现错误信息是

System.Runtime.InteropServices.COMException (0x80004005): Unspecified error



GetNavigationState doesn't support serialization of a parameter type which was passed to Frame.Navigate.

   at Windows.UI.Xaml.Controls.Frame.GetNavigationState()

   at TX.WifiSurfing.Common.SuspensionManager.SaveFrameNavigationState(Frame frame)

   at TX.WifiSurfing.Common.SuspensionManager.<SaveAsync>d__0.MoveNext()

System.Collections.ListDictionaryInternal

意思是由于页面导航的参数不支持序列化,程序挂起时保存状态的时候出现了异常:

       /// <summary>

        /// 在将要挂起应用程序执行时调用。    将保存应用程序状态

        /// 将被终止还是恢复的情况下保存应用程序状态,

        /// 并让内存内容保持不变。

        /// </summary>

        private async void OnSuspending(object sender, SuspendingEventArgs e)

        {

            var deferral = e.SuspendingOperation.GetDeferral();

            await SuspensionManager.SaveAsync();

            deferral.Complete();

        }

但是我整个程序并没有在导航的时候传递对象,出现这问题很让我费解。通过查看异常页面的OnNavigatedTo方法,发现当我使用NavigateToPageAction导航的时候,如果Parameter不设置,程序会设置一个默认值,由于我是使用EventTriggerBehavior的Tapped事件触发的,Parameter被设置成了TappedRoutedEventArgs,这是一个不可序列化的对象,所以在挂起时保存状态的时候出现了错误。把它设置成Parameter=“ ”是一个解决方案(注:设置成Parameter=“”和Parameter=“{x:null}”都不可以,还是原来的默认值)。

 SuspensionManagerErrorDemo.rar

你可能感兴趣的:(windows)