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

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

概述  Silverlight 2.0去掉了原来的downloader对象,代之以WebClient对象。WebClient类为Silverlight插件提供了一整套的HTTP客户端功能。可以下载应用程序数据,比如XAML内容,附加的程序集或者诸如图片的媒体文件。WebClient类可以根据程序的需要下载内容,可以异步呈现或者利用下载的内容,而不是随HTML页面一起下载。如果你要按照一定的序列替换Si

 

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) {
...
}

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

下面就是一个下载图片的例子,本例子通过输入文件路径,然后以进度条显示下载的状态,下载完毕后进行显示。
需要注意的是:给OpenReadAsyncDownloadStringAsync 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学习教程(七):在Silverlight 2.0中制作资源加载进度条全部内容,希望文章能够帮你解决Silverlight 2学习教程(七):在Silverlight 2.0中制作资源加载进度条所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1062020.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存