Win10 开发3

来源:互联网 发布:dijkstra算法详解 编辑:程序博客网 时间:2024/06/06 00:32
数据在挂起状态下的保存

12、保存用户数据

应用状态:运行、挂起、结束

在 挂起 状态下保存数据

方案:(创建基础页,在基础页中有Common文件)

1)使用微软提供的Commom文件中的类:SuspensionManger和NavigaHelper(从第三方提供的类来完成)

SuspensionManager方法:

保存->

a.打开App.xaml.cs文件,在Onlaunched事件方法中找到创建Frame的代码

b.添加注册SuspensionManager的代码,注册这个方法就是告诉在挂起时有一个缓存可以缓存数据

  ...OnLaunched..

  {

    ...

if(tootFrame==null)

{

rootFrame= new Frame();

//添加注册SuspensionManager(导入命名空间)

SuspensionManager.RegisterFrame(rootFrame,"appFrame");

}

  }

c.找到OnSuspending事件处理函数,加上一个保存数据的代码

  awaitSuspensionManager.SaveAsync();//保存数据代码

 

程序再次运行时加载数据->

...OnLaunched..

{

//TODO:从之前的挂起的应用程序加载状态

//添加从保存的数据恢复数据的代码

awaitSuspensionManager.RestoreAsync();

}

 

 

2)NavigationHelper中Save-Load方法(需要SuspensionManger作为支撑)        

保存->

a.转到1)中的b步骤

添加注册SuspensionManager的代码,注册这个方法就是告诉在挂起时有一个缓存可以缓存数据

...OnLaunched..

{

...

FramerootFrame = Window.Current.Content as Frame;

//添加注册SuspensionManager(导入命名空间)的代码

SuspensionManager.RegisterFrame(rootFrame,"appFrame");

...

}

privatevoid NavigationgHelper_SaveState(Object sender,SaveStateEvent)

{

//使用这个SaveState保存数据就看这个参数

e.PageState.Add("txt",txt.Text);//在设计器中的一个<TextBox x:Name="txt"/>

}

b.找到OnSuspending方法

privatevoid OnSuspending(object sender, SuspendingEventArgs e)

{

vardeferral = e.SuspendingOperation.GetDeferral();

 

// TODO: 保存应用程序状态并停止任何后台活动

SuspensionManager.SaveAsync();//用于保存数据的代码(添加)

 

deferral.Complete();

}

 

加载数据->

a.

...OnLaunched..

{

//TODO:从之前的挂起的应用程序加载状态

//添加从保存的数据恢复数据的代码

awaitSuspensionManager.RestoreAsync();

}

b.

privatevoid NavigationHelper_LoadState(..)

{

if(e.PageState!=null&&e.PageState.ContainsKey("txt"))

{

txt.Text=e.PageState["txt"]as string;

}

else

{

await new MessageDialog("没有数据").ShowAsync();

}

}

3)使用数据存储(推荐做法!)

Windows.Storage.ApplicationData.Current.LoacalSettings

 

a.现在设计器中创建一个<TextBoxx:Name="txt" TextChanged="TextBox_TextChanged"/>

  //TextBox中的文本变化事件

  private void TextBox_TextChanged(...)

  {

  //保存数据

 ApplicationData.Current.LoacalSettings.Values["txt"]=txt.Text;

 

 //如果有多台win设备,可以通过win账户使数据共享

 //ApplicationData.Current.RoamingSettings.Values[]

  }

b.

  private void NavigationHelper_LoadState(..)

{

//添加加载数据函数

stringstr = ApplicationData.Current.LoacalSettings.Values["txt"];

if(str==null)

{

await new MessageDialog("没有数据").ShowAsync();

}

else

{

txt.Text= str;

}

}

0 0
原创粉丝点击