Silverlight应用程序服务

news/2024/6/28 23:47:22 标签: silverlight, application, 扩展, javascript, 存储, 浏览器

 

当使用 Silverlight 的托管 API 创建应用程序时,必须创建一个从 Application 派生的类。Application 类提供应用程序通常要求的若干服务。它主要表示应用程序代码在 Silverlight 插件生命周期中的入口点。

Silverlight 插件生命周期自用户导航到承载 Silverlight 插件的网页时开始。如果用户已安装了 Silverlight,则 Web 浏览器激活此插件并开始下载应用程序包。

插件加载 Silverlight 核心服务,然后加载 Silverlight 公共语言运行时 (CLR),后者将为应用程序创建 AppDomain。当应用程序包下载完成时,CLR 实例化您的 Application 类并引发其 Startup 事件。

您可以向应用程序类构造函数中添加代码。然而,您通常将 Startup 事件处理程序用于大多数应用程序初始化任务,如显示用户界面页。

下图演示插件激活过程和此过程中各组件之间的关系。

Silverlight <a class=浏览器组件" src="http://i.msdn.microsoft.com/Cc221363.SL_CompStack%28zh-cn,VS.95%29.png" />

有关 Silverlight 核心服务和 CLR 的更多信息,请参见 Silverlight 结构。有关 Silverlight 应用程序包的更多信息,请参见应用程序结构。

基于 Silverlight 的应用程序中可能只有一个 Application 实例。启动后,Application 实例提供应用程序通常要求的若干服务。您可以通过从 static Application..::.Current 属性中检索 Application 实例,从应用程序中的任何代码访问这些服务。

本主题介绍 Application 类的以下功能。

  • 应用程序生存期管理。

  • 应用程序资源文件加载。

  • 未经处理的异常处理。

  • Web 宿主集成。

  • 扩展性。

  应用程序生存期管理

您可以在应用程序生存期的以下各点向运行的应用程序类添加代码:

  • 应用程序类构造函数。

  • 应用程序启动事件。

  • 应用程序退出事件。

应用程序类构造

您可以向应用程序类构造函数添加代码,以执行基本初始化任务,例如,初始化应用程序变量和附加事件处理程序。

大多数应用程序类是使用 XAML 标记和代码隐藏文件定义的。应用程序类的构造函数通常包括对于 InitializeComponent 方法的调用,该方法负责合并 XAML 和代码隐藏文件。构建过程将生成 InitializeComponent 方法实现,此实现通过调用 Application..::.LoadComponent 方法来加载 XAML。

应用程序 XAML 可以指定应用程序事件处理程序并使用属性和样式填充 Application..::.Resources 字典,以供整个应用程序使用。有关更多信息,请参见资源字典。

应用程序启动

当 Silverlight 插件已完成加载应用程序包时,将发生 Application..::.Startup 事件。此时,所有包内程序集已加载到应用程序域中并可供使用。

可以使用 Startup 事件来执行常见的初始化任务,如下所示:

  • 处理在启动时检索的数据(如初始化和 URL 参数)或在前一个应用程序会话中存储的数据。

  • 显示应用程序用户界面 (UI)。

  • 开始异步下载其他资源文件或程序集。

以下各节简要介绍如何完成这些任务并提供指向更多信息的链接。

处理启动数据

若要检索在 Silverlight 插件配置中指定的初始化参数,请使用 StartupEventArgs..::.InitParams 属性。有关更多信息,请参见如何:指定和检索自定义初始化参数。

若要从宿主网页检索 URL 参数,请使用 HtmlDocument..::.QueryString 属性。可以从 static HtmlPage..::.Document 属性检索 HtmlDocument 对象。但请注意,如果禁用了 HTML 访问,则无法使用 Document 属性。当网页承载来自不同域的基于 Silverlight 的应用程序时,这通常是这种情况。有关更多信息,请参见 HTML 桥中的安全设置。

若要从前一个应用程序会话中检索数据,请使用 IsolatedStorageSettings 类。有关更多信息,请参见如何使用独立存储存储和检索应用程序设置。

若要使启动数据可用于整个应用程序,则将其添加到 Application..::.Resources 字典。

显示用户界面

若要显示应用程序用户界面,请在 Startup 事件处理程序中设置 RootVisual 属性。

您只能设置此属性一次,通常是针对为用户界面提供布局根的 UserControl。可以通过更改可视化元素根的布局根在启动后更改用户界面。有关更多信息,请参见导航概述。

注意说明:

Startup 事件可能在宿主网页完成布局计算之前发生。如果您将相对缩放用于 Silverlight 插件,则 Content..::.ActualHeight 和 ActualWidth 值在应用程序启动时没有意义。若要根据插件的当前大小缩放用户界面或执行布局,必须处理 Content..::.Resized 事件。有关更多信息,请参见调整 Silverlight 插件大小。

检索其他资源

若要以异步方式下载其他资源文件或程序集,请使用 WebClient 类。

如果文件为 zip 文件,则可以使用 Application..::.GetResourceStream(StreamResourceInfo, Uri) 方法在下载后解压缩其内容。有关更多信息,请参见按需下载内容。

如果文件为程序集,则可以通过创建一个新的 AssemblyPart 对象并调用其 Load 方法将程序集加载到应用程序的 AppDomain 中。有关更多信息,请参见如何按需加载程序集。

应用程序退出

当发生以下操作之一时,将发生 Application..::.Exit 事件:

  • 用户关闭承载 Silverlight 插件的网页。

  • 用户刷新宿主网页。

  • 用户将浏览器导航出宿主网页。

  • 宿主网页使用 JavaScript 和 HTML DOM 从页中删除插件。

  • 用户注销或关闭操作系统。

Application..::.Exit 事件的一个常见用途是使用 IsolatedStorageSettings 类来保存应用程序设置。有关更多信息,请参见如何使用独立存储存储和检索应用程序设置。

  应用程序资源文件加载

Silverlight 为从应用程序程序集、库程序集、应用程序包和主机服务器加载资源文件提供了广泛的支持。这种支持取决于您如何配置资源文件、您将它们部署在何处以及如何加载它们。有关更多信息,请参见资源文件和应用程序结构。

若要以编程方式访问原始资源文件,请使用 Application..::.GetResourceStream 方法。此方法提供重载,以使您能够从应用程序包或您按需检索的 zip 文件中解压缩资源文件。有关更多信息,请参见按需下载内容和如何按需加载程序集。

  未经处理的异常处理

在应用程序的生存期中,可能会发生意外情况,而导致 Silverlight 插件引发异常。尽管您可以在应用程序代码中捕获异常,但您可能无法预期所有潜在的异常。

未经处理的异常将导致 Silverlight 插件停止在浏览器中运行。为了防止发生这一情况,请处理 Application..::.UnhandledException 事件。可以用事件数据来确定异常是否可恢复。如果可以从异常中恢复,则将 ApplicationUnhandledExceptionEventArgs..::.Handled 属性设置为 true。

如果您不在托管代码中处理异常,则将发生 Silverlight 插件 onError 事件。这向您提供最后一个机会,供您通过在宿主网页中使用 JavaScript 来处理此异常。onError 事件提供对插件错误代码的访问,这对于进行调试可能很有用。有关更多信息,请参见调试、错误处理和异常。有关错误代码信息,请参见 Silverlight Plug-in Error Messages(Silverlight 插件错误消息)。

  宿主集成

托管代码直接与承载它的 Silverlight 插件交互有时很有用。例如,您可能希望检索初始插件配置值,或使用户能够在全屏模式下显示插件。

若要检索表示当前宿主插件的对象,请使用 Application..::.Host 属性。此属性范围 SilverlightHost 的一个实例,它提供与 Silverlight 插件对象参考中介绍的功能类似的功能。

  扩展

借助于应用程序扩展服务,您可以通过填充其 ApplicationLifetimeObjects 属性将更多服务添加到 Application 实例。此扩展性机制优于使用 Application 类的框架特定的子类。借助于应用程序扩展服务,可以与应用程序生存期事件进行深入集成,并可以轻松地同时使用多个扩展。有关更多信息,请参见应用程序扩展服务。

  请参见

参考

Application

其他资源

应用程序模型

应用程序结构

资源文件

资源字典

应用程序扩展服务


http://www.niftyadmin.cn/n/1706205.html

相关文章

listView优化问题

关于listView优化问题&#xff1a;阻止列表重复形状的加载&#xff0c;即选项样式的重复加载。加载一次即可&#xff0c;缓存到convertView其中notes为listView列表集合&#xff0c;note为列表中一个选项对象&#xff0c;有noteInfo、noteTime、isCheck三个属性&#xff0c;not…

全国计算机a类高等学校,全国高校A类专业概览,谁强谁弱一目了然

2020年高校A类专业统计可以看到&#xff0c;在榜单上浙江大学超过清北复交夺得榜首&#xff0c;A类专业最多&#xff0c;达到了39个&#xff01;然后是北京双子星清华北大和上海双子星复旦交大。不过综合实力浙江肯定是比不上清华大学和北京大学&#xff0c;因为清华大学和北京…

Silverlight如何按需加载程序集

下面的示例代码演示如何从主机服务器按需检索程序集&#xff0c;然后将其加载到当前应用程序域中。 此示例使用 WebClient 类启动程序集的异步下载以响应用户鼠标单击。当下载完成后&#xff0c;将使用 AssemblyPart 类来加载此程序集。 此示例假定您已在您的应用程序项目中添…

VC++ MFC DLL模板

1、VS2003新建DLL项目dllTest 2、项目dllTest中添加类CDllDailog 3、切换到Resource view界面&#xff0c;添加新Button(ID:IDC_BUTTON_Hello Caption:Hello),并点击进入DllDialog.cpp脚本&#xff0c;添加代码如下&#xff08;红色&#xff09;&#xff1a; 1 #include "…

Silverlight应用程序扩展服务

使用应用程序扩展服务可以扩展 Silverlight 应用程序模型。通常使用扩展服务来封装特定功能域中由多个应用程序使用的功能。例如&#xff0c;可以使用扩展服务来实现专用媒体处理或自定义数据访问层。 Application 类提供多数应用程序共用的服务。有关更多信息&#xff0c;请参…

新疆计算机考试ppt教程,2014新疆维吾尔自治区计算机等级考试二级考试答题技巧...

2014新疆维吾尔自治区计算机等级考试二级考试答题技巧1、在内存中&#xff0c;每个基本单位都被赋予一个唯一的序号&#xff0c;这个序号称为( C )A、字节 B、编号 C、地址 D、容量2、我国颁布汉字编码标准GB 2313-1980&#xff0c;是规定了汉字的( B )A、内部码 B、交换码 C、…

class$1,class$2,class$innerclass中的$的含义

class文件名中的$的含义如下&#xff1a; $后面的类是$前面的类的内部类 内部类有以下两种情况: 1.普通的组合类形式&#xff0c;即在一个类内部定义一个普通的类 public class Outer {class Inner {public Inner {}}} javac Outer.java后会出现两个class文件: Outer.class…

电机计算机仿真,电机调速系统的计算机仿真

《电机调速系统的计算机仿真》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《电机调速系统的计算机仿真(11页珍藏版)》请在人人文库网上搜索。1、电机调速系统的计算机仿真一 实验目的1.通过仿真了解并会运用matlab/simulink与simpowersysdem设计电机系统并对系统进行…