日期:2014-05-17 浏览次数:20814 次
创建Win8“板砖”应用后,我们不妨关注一下App类。在生成的代码中我们可以看到,主要处理了两个事件:
一、重写OnLaunched方法;
二、处理Suspending事件。
App类的代码如下,这是项目模板生成的。
namespace MyApp { /// <summary> /// 提供特定于应用程序的行为,以补充默认的应用程序类。 /// </summary> sealed partial class App : Application { /// <summary> /// 初始化单一实例应用程序对象。这是执行的创作代码的第一行, /// 逻辑上等同于 main() 或 WinMain()。 /// </summary> public App() { this.InitializeComponent(); this.Suspending += OnSuspending; } /// <summary> /// 在应用程序由最终用户正常启动时进行调用。 /// 当启动应用程序以执行打开特定的文件或显示搜索结果等操作时 /// 将使用其他入口点。 /// </summary> /// <param name="args">有关启动请求和过程的详细信息。</param> protected override void OnLaunched(LaunchActivatedEventArgs args) { Frame rootFrame = Window.Current.Content as Frame; // 不要在窗口已包含内容时重复应用程序初始化, // 只需确保窗口处于活动状态 if (rootFrame == null) { // 创建要充当导航上下文的框架,并导航到第一页 rootFrame = new Frame(); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: 从之前挂起的应用程序加载状态 } // 将框架放在当前窗口中 Window.Current.Content = rootFrame; } if (rootFrame.Content == null) { // 当未还原导航堆栈时,导航到第一页, // 并通过将所需信息作为导航参数传入来配置 // 参数 if (!rootFrame.Navigate(typeof(MainPage), args.Arguments)) { throw new Exception("Failed to create initial page"); } } // 确保当前窗口处于活动状态 Window.Current.Activate(); } /// <summary> /// 在将要挂起应用程序执行时调用。在不知道应用程序 /// 将被终止还是恢复的情况下保存应用程序状态, /// 并让内存内容保持不变。 /// </summary> /// <param name="sender">挂起的请求的源。</param> /// <param name="e">有关挂起的请求的详细信息。</param> private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: 保存应用程序状态并停止任何后台活动 deferral.Complete(); } } }
那么,处理这两个事件干吗?各位还记得Windows Phone开发的时候,我们说到的应用程序状态吗?在应用程序挂起或者结束后,状态信息有可能会丢失,我们会在适当的时候保存状态信息,在必要时恢复。
现在我们把OnLaunched方法改一下,修改后如下所示。
protected override void OnLaunched(LaunchActivatedEventArgs args) { /*------------------------------------------------*/ // 判断前一个状态 string State = string.Empty; switch (args.PreviousExecutionState) { case ApplicationExecutionState.ClosedByUser: State = string.Format("{0} - 应用程序被用户关闭。", DateTime.Now.ToString("HH:mm:ss")); break; case ApplicationExecutionState.NotRunning: State = string.Format("{0} - 应用程序未运行。", DateTime.Now.ToString("HH:mm:ss")); break; case ApplicationExecutionState.Running: State = string.Format("{0} - 应用程序正在运行。", DateTime.Now.ToString("HH:mm:ss")); break; case ApplicationExecutionState.Suspended: State = string.Format("{0} - 应用程序被挂起。", DateTime.Now.ToString("HH:mm:ss")); break; case ApplicationExecutionState.Terminated: State = string.Format("{0} - 应用程序终止运行。", DateTime.Now.ToString("HH:mm:ss")); break; default: State = "无"; break;