首页 > 代码库 > Windows Store App 中挂起时,程序奔溃的问题

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

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

System.Runtime.InteropServices.COMException (0x80004005): Unspecified errorGetNavigationState doesnt 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