创建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;
}
System.Diagnostics.Debug.WriteLine(State);
/*------------------------------------------------------------------------------------*/
……
}
要理解某一东西,最好的方法,莫过于亲自来试一试。
按F5运行应用程序,注意看“输出”窗口,如果没有打开“输出”窗口,在程序运行后,回到VS,从“调试”菜单下的“窗口”里面找。
当程序运行后,再回到VS,我们在“输出”窗口中看到的是“程序未运行”。

哦?这是为什么呢?程序运行了,怎么会未运行呢?
看清楚了,args.PreviousExecutionState属性指的是应用程序被激活时的“前一个状态”,我们第一次运行程序,那么它的前一个状态当然是未运行了。
在“调试位置”(这个估计翻译问题,其实也挺难翻译的)中,在下拉列表中选择“挂起”,这样我们可以模拟应用程序挂起。

选择后,再点一下“挂起”,这时候,应用程序已经挂起。
接着,再选择“继续”。

再点击一下“继续”,这时候,将模拟应用程从挂起状态恢复。
我们发现,在“挂起”和“继续”之间并没有输出内容。因为在这两个状态切换之间,应用程序仍在运行,也就是说,应用程序没有执行OnLaunched方法。
这时候,我们点击“开始”,回到开始屏幕,并切换到Windows桌面,然后把鼠标移到左上角,当看到应用程序的窗口时,把它拖进桌面,不要松开鼠标,直接向下扔,就像扔垃圾一样。这样,就关闭了应用程序。当然,还有一种方法,当鼠标移到屏幕左上角,当看到应用程序缩略图时,右击,从弹出菜单中选择“关闭”也可以关闭应用程序。

这样,应用程序是被用户关闭了的,接着,回到VS,稍等一下,等调试结束后,按F5再次运行。看看这回会输出什么?

因为刚才我们通过用户操作终止应用程序,再次运行,OnLaunched方法被执行,这时候,输出内容为“应用程序被用户关闭”,即前一个状态。
就像当初模板生成的代码一样,保存和恢复状态数据,只关注Launch和Suspend两个行为即可,上面的试验说明,应用程序被激活有两个状态:挂起后终止,用户关闭。这两种情况下我们需要恢复相关数据,即
ApplicationExecutionState.Terminated
ApplicationExecutionState.ClosedByUser
其实,按照VS生成的代码模板和注释提示处理即可,这里我只是为了演示才修改了代码。
更多详细信息请查看
java教程网 http://www.itchm.com/forum-59-1.html
分享到:
相关推荐
### Windows Phone 7 应用程序生命周期:Tombstoning详解 #### 概述 Windows Phone 7 的应用程序生命周期管理是一套复杂而精细的机制,旨在优化用户体验和设备性能。在这一平台上,应用程序的生命周期受制于特定的...
Windows 8应用商店是发布和获取这些应用程序的平台,为开发者提供了广泛的潜在用户群体。 开发Windows 8应用商店程序主要涉及以下知识点: 1. **编程语言和框架**:Windows 8应用通常使用XAML(Extensible ...
### 安全开发生命周期(SDL)概览 #### 一、SDL概念 安全开发生命周期(SDL, Security Development Lifecycle)是一种旨在确保软件在各个开发阶段都融入了安全性考量的方法论。这种方法论着重于通过在软件开发早期阶段...
- **CTestApp**: 应用程序类,负责管理应用程序生命周期,初始化资源等。 - **CMainFrame**: 主框架窗口类,用于管理主程序窗口,显示标题栏、工具栏、状态栏等,并处理窗口操作消息。 - **CTestDoc**: 文档类,...
在Windows应用程序开发中,Microsoft Foundation Class Library (MFC) 是微软为Visual C++设计的一个强大的类库,旨在提升开发效率并充分利用C++的特性。MFC通过构建一个应用程序框架,使得开发者可以便捷地创建出高...
以上内容涵盖了《Windows应用程序编程指南》pdf文件中的核心知识点,旨在帮助开发者更好地理解和掌握Hopen操作系统下的应用程序开发技巧。通过这些知识点的学习,开发者不仅能够快速上手开发工作,还能深入了解Hopen...
MFC将Windows API中的函数和数据封装为类,利用面向对象的特性如继承和多态,使得开发者可以通过派生和定制已有类来构建自己的应用程序框架,从而提高开发效率。 在MFC框架中,有两个关键的类:CWinApp和CFrameWnd...
2. **XAML 浏览器应用程序 (Xbap)**:一种特殊的基于Web的应用程序,其主要组成元素为XAML页面,可以在Web浏览器(例如Internet Explorer和Firefox)中运行。 3. **自定义控件库**:非可执行程序集,包含了一系列可...
《MFC Windows应用程序设计》是任哲编著的关于Windows应用程序开发的专业教材,主要围绕Microsoft Foundation Classes (MFC) 库展开,该库是微软提供的一套C++类库,用于简化Windows API的使用,帮助开发者构建高效...
### C++ & CLR (VS2015) 编写 Windows 窗体应用程序 #### 知识点一:理解CLR与C++ - **CLR(Common Language Runtime)**:是.NET框架的核心组件之一,提供了执行环境,使得开发人员能够用多种编程语言编写代码,...
如果你想要学习如何在Windows 8上开发应用程序,查看并研究这样的源码是一个很好的起点。你可以从中了解应用的架构设计、功能实现、数据处理以及用户界面的构建方法。 从标签“win8 应用”我们可以推断,这个项目...
在探讨如何使用HTML5和JavaScript开发Windows 8 Metro应用程序之前,我们先来了解一些基础知识。 #### 一、Windows 8 Metro 应用程序概述 Windows 8引入了一种全新的应用类型——Metro应用(现称为Modern应用或UWP...
在开发Windows服务程序时,要注意服务的生命周期管理和正确处理各种服务控制信号,确保服务能够正常启动、运行、停止以及响应系统事件。此外,还需要考虑服务的安全性,避免未经授权的访问和操作。 总之,Windows...
在本课程“微软C#系列课程(1):应用程序的执行”中,我们将深入探讨C#编程语言的基础,特别是关于如何启动和管理一个C#应用程序的生命周期。这是一系列现代C#教程的第一部分,由微软中国MSDN特约教师精心制作,旨在...
《Windows 7设备驱动程序开发》是一本深入探讨Windows操作系统下设备驱动程序设计与实现的专业书籍。这本书由Ronald D. Reeves撰写,旨在帮助开发者理解并掌握在Windows 7环境下编写设备驱动程序的关键技术和方法。 ...
.NET框架是微软推出的一种开发平台,它为开发者提供了丰富的类库和工具,使得构建桌面应用程序、Web应用程序和服务变得更加便捷。本资源聚焦于基于.NET 2.0版本的Windows窗体应用开发和.NET 2.0程序设计,这两个主题...
《Windows 8程序开发入门经典》是一本专为开发者准备的指南,旨在引导读者进入Windows 8应用程序开发的世界。该书由Wrox出版社出版,英文版提供了全面且深入的介绍,帮助初学者理解和掌握开发Windows 8应用所需的...
Windows服务是一种在后台运行的应用程序,即使没有用户登录也能工作,它们通常用于执行系统级任务或为其他应用程序提供功能。 1. **C++ Windows服务基础** - Windows服务是Windows操作系统中的一个特殊类型的进程...