`
java2000.net
  • 浏览: 656894 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Silverlight 2学习教程(七):在Silverlight 2.0中制作资源加载进度条

阅读更多

Silverlight 2.0去掉了原来的downloader对象,代之以WebClient对象。WebClient类为Silverlight插件提供了一整套的HTTP客户端功能。可以下载应用程序数据,比如XAML内容,附加的程序集或者诸如图片的媒体文件。WebClient类可以根据程序的需要下载内容,可以异步呈现或者利用下载的内容,而不是随HTML页面一起下载。如果你要按照一定的序列替换Silverlight内容,不需要刷新页面。比较常见的来自是从视频库中播放视频,但本节是以播放图片为例子的。

关于WebClient

WebClient请求是异步的,大部分的交互操作都是依靠事件处理器来完成的。通常,需要定义如下中的一个或者多个处理器函数。

  • ■ DownloadStringCompleted
  • ■ OpenReadCompleted
  • ■ DownloadProgressChanged

根据你请求的资源是字符串还是流,需要使用不同的API,当请求一个字符串时,可以调用下面的方法:

  • ■ DownloadStringAsync(Uri)
  • ■ DownloadStringAsync(Uri, Object)

然后再处理DownloadStringCompleted事件。

当请求的是一个流时,可以调用下面的方法:

  • ■ OpenReadAsync(Uri)
  • ■ OpenReadAsync(Uri, Object)

然后处理OpenReadCompleted事件。

OpenReadCompleted事件处理器基本的签名如下:

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) {
...
}

这个处理器中最相关的API是OpenReadCompletedEventArgs参数的Result属性,这个属性是Stream类型的,可以直接使用这个属性,或者调用需要Stream对象的方法,也可以使用StreamReader对象或者其他访问流的API。

下面就是一个下载图片的例子,本例子通过输入文件路径,然后以进度条显示下载的状态,下载完毕后进行显示。
需要注意的是:给OpenReadAsync和DownloadStringAsync API制定的URI通常采用相对路径,WebClient不支持FILE协议下载,在进行测试的时候需要注意,必须建立站点进行测试。可以使用HTTPS协议,但包含这个插件的HTML也必须同时是HTTPS协议才可以。在URI中不能使用反斜杠(\),必须使用正斜杠(/)。

例子代码如下:

Page.xaml:

<UserControl x:Class="SilverlightApplication3.Page"
    xmlns
="http://schemas.microsoft.com/client/2007" 
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width
="1024" Height="800">
    
<Grid x:Name="LayoutRoot" Background="White">
        
<Canvas Canvas.Top="0">
            
<Rectangle  Name="progressRectangle"  Canvas.Left="20" Canvas.Top="10" Height="10" Width="0"  Fill="Navy" />
            
<Rectangle  Canvas.Top="9" Canvas.Left="19" Height="12" Width="202" StrokeThickness="1" Stroke="Black" />
            
<TextBlock  x:Name="progressText" Canvas.Top="6" Canvas.Left="230" Text="0%" FontSize="12" />
            
<TextBox x:Name="filepath" Canvas.Left="20" Width="100" Canvas.Top="26" Text="p1.jpg"></TextBox>
            
<Button Canvas.Top="26" Canvas.Left="130" Content="下载文件" Click="Button_Click"></Button>
            
<Image Canvas.Left="60" x:Name="img" Canvas.Top="60" Width="1024"></Image>
        
</Canvas>
    
</Grid>
</UserControl>

Page.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Net;
using System.IO;
using System.Windows.Resources;

namespace SilverlightApplication3
{
    
public partial class Page : UserControl
    {
        
public Page()
        {
            InitializeComponent();
        }
        
private void Button_Click(object sender, RoutedEventArgs e)
        {
          img.Source 
= null;
            WebClient wc 
= new WebClient();
            
if (wc.IsBusy)
            {
                wc.CancelAsync();
            }
            wc.OpenReadCompleted 
+= new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
            wc.DownloadProgressChanged 
+= new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
            wc.OpenReadAsync(
new Uri(filepath.Text, UriKind.Relative));

        }

        
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            BitmapImage imgsrc 
= new BitmapImage();
            imgsrc.SetSource(e.Result 
as Stream);
            img.Source 
= imgsrc;
        }

        
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressText.Text 
= e.ProgressPercentage.ToString() + "%";
            progressRectangle.Width 
= (double)e.ProgressPercentage * 2;
        }
    }
}

运行过程中的界面和最终运行结果如下:

分享到:
评论

相关推荐

    silverlight 2.0 安装文件

    **银光(Silverlight)2.0:定义与概述** 银光(Silverlight)是由微软公司开发的一个跨浏览器、跨平台的插件,用于在Web上实现丰富的互动媒体体验和应用程序。 Silverlight 2.0是该技术的一个关键版本,它在前代的...

    silverlight进度条

    在本文中,我们将深入探讨如何在Silverlight中创建一个自定义的进度条,这是一个适合新手学习的实践项目。Silverlight,作为.NET Framework的一部分,提供了一种丰富的交互式用户体验,但其工具箱并未直接包含预定义...

    Silverlight 2.0 发现之旅系列课程(3):Silverlight 2.0 巴黎站

    【Silverlight 2.0 发现之旅系列课程(3):Silverlight 2.0 巴黎站】 在本课程中,我们将深入探讨Microsoft Silverlight 2.0,这是一个跨平台、跨浏览器的插件技术,用于创建丰富的互联网应用程序(RIA)。作为"发现...

    Silverlight 2.0 发现之旅系列课程(1):Silverlight 2.0 北极站

    **Silverlight 2.0 发现之旅系列课程(1):Silverlight 2.0 北极站** 本文将深入探讨Microsoft Silverlight 2.0,这是一个强大的开发平台,用于构建丰富的、交互式的Web应用程序。Silverlight 2.0是微软在2008年推出...

    silverlight 自定义进度条

    在Silverlight应用开发中,有时我们可能需要对默认的进度条控件进行自定义,以满足界面设计或功能上的特殊需求。"Silverlight 自定义进度条"是一个关于如何在Silverlight环境中创建美观且功能丰富的进度指示器的主题...

    Silverlight 2.0 发现之旅系列课程(4):Silverlight 2.0 北京站

    2. **数据绑定**:Silverlight 2.0支持WPF的数据绑定模型,使得UI组件可以直接与数据源关联,简化了数据驱动的UI设计。课程会涵盖数据绑定的基本概念、如何使用DataSource和DataTemplate等。 3. **控件库**:课程会...

    SilverLight 2.0 调用 WebService 视频教程

    SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程

    Silverlight 2.0 发现之旅系列课程(2):Silverlight 2.0 开罗站

    **Silverlight 2.0 发现之旅系列课程(2):Silverlight 2.0 开罗站** 在本文中,我们将深入探讨Silverlight 2.0这一强大的富互联网应用程序(RIA)开发平台,特别是通过“开罗站”的课程内容。 Silverlight是由微软...

    Silverlight 2.0

    5. **教育与培训**:通过互动式教程、模拟实验等方式,教育机构可以利用Silverlight 2.0创建富有吸引力的学习资源。 然而,随着HTML5的崛起和微软对UWP(Universal Windows Platform)的重视,Silverlight的市场...

    微软Silverlight 2.0 发现之旅第二讲PDF

    - **跨浏览器兼容**:Silverlight 2.0插件能在多个浏览器上运行,包括Internet Explorer、Firefox、Safari等,打破了传统的平台限制。 - **RIA(Rich Internet Applications)**:通过Silverlight 2.0,开发者可以...

    silverlight2.0入门教程

    "silverlight详细的demo"这个压缩包中的示例代码是学习Silverlight 2.0的重要资源。通过查看和运行这些demo,你可以直观地理解上述知识点,并实践应用。每个demo都展示了特定的功能或技术,可以帮助你快速上手并积累...

    Silverlight2.0实例-〖Silverlight Klotski〗

    2. **数据绑定**:Silverlight支持数据绑定,使得UI元素可以直接与后台数据源关联。在游戏逻辑中,滑块的位置、状态等信息可以通过数据绑定实时反映在界面上,提高游戏的响应速度。 3. **动画系统**:Silverlight ...

    ArcGIS Silverlight/WPF API 2.0

    ArcGIS SilverLight/WPF API 2.0版本已正式发布,新特性包括: 1、使用2.0开发应用必须基于SL4.0,不再支持SL3.0版本。 2、构建SL4.0版本的应用必须使用Visual Studio 2010 和 Expression Blend 4 。 3、支持...

    一步一步学Silverlight 2系列

    Silverlight 2系列(33):Silverlight 2应用Web Service两例 Silverlight 2系列文章 Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放 Silverlight 2系列(31):图形图像综合实例—实现水中倒影...

    Silverlight.2.0

    **Silverlight 2.0 技术详解** Silverlight是由微软公司开发的一种基于...如果你需要Silverlight 2.0的相关资源,可以留下邮箱地址,资源分享仍然有价值,尤其是对于学习历史技术和理解技术演进历程的开发者而言。

    一步一步学Silverlight_2系列

    Silverlight 2系列(33):Silverlight 2应用Web Service两例 Silverlight 2系列文章 Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放 Silverlight 2系列(31):图形图像综合实例—实现水中倒影...

    一个基于C#创建类库并有机集成到Silverlight2.0中调用程序例子

    在本文中,我们将深入探讨如何使用C#语言创建一个类库,并将其无缝集成到Silverlight 2.0应用程序中。Silverlight是微软推出的一种轻量级的插件技术,用于在Web浏览器中创建丰富的交互式用户体验,而C#作为.NET框架...

    Silverlight 2.0 教程

    在"Silverlight 2.0 发现之旅系列课程(1):Silverlight 2.0 北极站"这个文件中,很可能是课程的第一部分,可能会从基础知识和安装开始讲解,逐步引导你进入Silverlight开发的世界。随着课程的深入,你将逐步掌握更多...

    学习教程大全:GIS for Silverlight:2023年.pdf

    《GIS for Silverlight 学习教程大全:2023年》 GIS(Geographic Information System,地理信息系统)是结合地图、数据、分析和可视化工具的综合系统,它在现代社会中发挥着重要作用,尤其在城市规划、环境保护、...

Global site tag (gtag.js) - Google Analytics