日期:2014-05-17 浏览次数:20946 次
创建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;