技术开发 频道

WPF入门教程:理解Application对象


    图1所示的过程简单而清晰,但是需要注意的是,图中箭头所指的方向以及连接情况。很可能部分读者会认为在Startup事件之后,触发Activated事件;在触发Deactivated事件之后,触发DispatcherUnhandledException事件,这些类似的想法都是不正确的,都是由于没有认真查看图中箭头而产生的。

   下面简单说明一下图1所包含的6个事件,它们是WPF应用程序生命周期中的主要事件。

Startup事件

    在调用Application.Run()方法之后,主窗口显示之前,触发该事件。在该事件的处理程序中,开发人员可检测多个命令行参数。这些参数以数组形式存在,通过StartupEventArgs.Args属性即可访问参数数组。另外,可在Startup事件处理程序中添加显示用户界面,显示窗口等代码逻辑。例如,以下代码实现处理命令参数的功能:
void App_Startup(object sender, StartupEventArgs e) 
{
for (int i = 0; i != e.Args.Length; ++i)
{
// 处理命令参数逻辑
...
}
}
  命令参数保存在e.Args数组中,当访问第一个命令参数时,使用的是e.Args[0]。

Activated事件和Deactivated事件

   当应用程序的窗口之一被激活时,触发该事件。激活是指加载应用程序并显示出窗口,或者从其他应用程序切换到当前应用程序。当应用程序被释放(deactivated)时,触发该事件。释放是指关闭应用程序的情况,或者从当前应用程序切换到其他应用程序。请看以下示例代码:

public partial class App : Application 
{
bool isApplicationActive;

void App_Activated(object sender, EventArgs e)
{
// 设置变量值
this.isApplicationActive = true;
}

void App_Deactivated(object sender, EventArgs e)
{
// 设置变量值
this.isApplicationActive = false;
}
}
   当触发Activated事件时,布尔类型变量isApplicationActive的值为true;当触发Deactivated事件时,该变量值被设置为false。

SessionEnding事件

    当用户试图注销或者关闭电脑时,触发该事件(为了辨别是何种情况,可使用   SessionEndingCancelEventArgs.ReasonSessionEnding属性)。在该事件处理程序中,可实现如询问和显示有关信息,结束Windows会话等功能。请看以下示例代码:
void App_SessionEnding(object sender, SessionEndingCancelEventArgs e) 
{
// 询问用户是否允许关闭会话
string msg = string.Format("{0}. End session?", e.ReasonSessionEnding);
MessageBoxResult result = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo);

// 根据选择确定是否终止会话
if (result == MessageBoxResult.No)
{
e.Cancel = true;
}
}
   SessionEndingCancelEventArgs事件参数的ReasonSessionEnding属性值是ReasonSessionEnding枚举值。如果Cancel属性为true,那么不要终止会话。
0
相关文章