Silverlight 3 Beta 新特性解析(4) - 离线功能篇

it2022-05-05  87

前提条件:

阅读本文之前请确认你已经安装了如下软件

Visual Studio 2008 (Express) SP1Silverlight 3 Tools For Visual StudioMicrosoft Expression Blend 3 MIX 09 Preview

本篇主要内容:

离线功能实战

离线功能原理

离线功能实战:

在开始这个部分的学习之前,请大家下载一下Silverlight 3 Beta 新特性解析(3) - Media篇的源代码

我们将把这个程序变成离线应用程序,其大概步骤如下:

1.打开SL3Beta.Media工程中Properties目录下的AppManifest.xml文件,其默认状态下是不支持离线功能的

1: <Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 2: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 3: > 4: <Deployment.Parts> 5: </Deployment.Parts> 6:  7: <!-- Uncomment the markup and update the fields below to make your application offline enabled 8: <Deployment.ApplicationIdentity> 9: <ApplicationIdentity 10: ShortName="Out of Browser Silverlight Application" 11: Title="Window Title of Your Silverlight Application"> 12: <ApplicationIdentity.Blurb>Description of your Silverlight application</ApplicationIdentity.Blurb> 13: </ApplicationIdentity> 14: </Deployment.ApplicationIdentity> 15: --> 16: </Deployment>

因为部署成离线功能的代码已经被注释起来了

2.修改AppManifest.xml文件如下

1: <Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 2: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 3: > 4: <Deployment.Parts> 5: </Deployment.Parts> 6:  7: <Deployment.ApplicationIdentity> 8: <ApplicationIdentity 9: ShortName="SL3Beta Test" 10: Title="SL3Beta Test"> 11: <ApplicationIdentity.Blurb>Description of your Silverlight application</ApplicationIdentity.Blurb> 12: <ApplicationIdentity.Icons> 13: <Icon Size="16x16">Band16.png</Icon> 14: <Icon Size="32x32">Band32.png</Icon> 15: <Icon Size="48x48">Band48.png</Icon> 16: <Icon Size="128x128">Band128.png</Icon> 17: </ApplicationIdentity.Icons> 18: </ApplicationIdentity> 19: </Deployment.ApplicationIdentity> 20: 21: </Deployment>

12~17行用来设置显示在桌面或者开始菜单里的图标

这些图标需要真的就是所规定的尺寸,否则将不会安装离线程序

(由于我没有符合要求的图标,所以采用了默认图标,也就是注释了12~17行)

3.右键点击鼠标,并选择安装离线程序

离线程序界面和图标

卸载方式也非常简单,直接点击右键选择卸载就可以了

 

总结一下,离线程序安装在了C:\Users\[用户名]\AppData\LocalLow\Microsoft\Silverlight(这个目录是隐藏的)

而产生离线程序的模式是通过调用Application.Current.Detach()这个方法来是实现的

知道这个了,我们就可以以鼠标点击按钮的形式(而不是右键点击鼠标)来实现离线功能了

修改我们的XAML文件如下:

1: <StackPanel> 2: <MediaElement x:Name="ME" Source="gt_hd.wmv" MouseLeftButtonDown="ME_MouseLeftButtonDown"/> 3: <controls:WrapPanel x:Name="ThumbnailsPanel"></controls:WrapPanel> 4: <Button Content="离线" x:Name="Detach" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Detach_Click"/> 5: </StackPanel>

而触发的鼠标点击事件实现如下:

1: private void Detach_Click(object sender, RoutedEventArgs e) 2: { 3: try 4: { 5: Application.Current.Detach(); 6: } 7: catch 8: { 9: MessageBox.Show("不支持离线功能!"); 10: } 11: }

由于调用Application.Current.Detach()这个方法不出现异常的前提是AppManifest.xml文件已经设置成支持离线功能了

所以上面做了下异常处理

但是现在还存在一个小小的问题

如果我们已经安装好了离线程序了,那么启动离线程序后再点击离线按钮会不会有问题了,怎么控制?

还好微软也想到了这一点

我们可以通过Application.Current.RunningOffline这个bool属性来获取当前的应用程序是否是离线程序,来决定离线按钮是否可见

1: if (Application.Current.RunningOffline) 2: { 3: this.Detach.Visibility = Visibility.Collapsed; 4: }

到这里我们算是大功告成了。

离线功能原理:

这部分内容来源于Tim Heuer的博文Silverlight 3 Out-of-browser Update Model

分离程序

调用Application.Current.Detach()这个方法后,进程将做如下一些事情:

通过浏览器重新获取最新的应用程序(XAP文件)XAP文件将保存在一个低信任度的本地地址,此外还将保存含有XAP文件原始URI地址等详细信息的元数据(metadata)

离线程序的启动:

这是进程会去查找XAP文件的原始URI并比对返回的HTTP数据

如果没有更新,程序将直接启动

如果有了新的更新

它将去重新下载这个XAP包来更新离线程序

这一过程是通过检查Application.Current.ExecutionState的状态是不是已经变成了DetachedUpdatesAvailable状态来完成的

(不过目前更新后,好像XAP包不会重新下载,估计是一个Bug)

 

作者:ibillguo 出处:http://ibillguo.cnblogs.com/ 本文版权由作者和博客园共同所有,转载请注明出处

转载于:https://www.cnblogs.com/ibillguo/archive/2009/03/21/1418323.html

相关资源:各显卡算力对照表!

最新回复(0)