Silverlight:Downloader的使用(event篇)


(1)Downloader的使用

首先我们看什么是Downloader,就是一个为描述Silverlight plug-in下载功能的集合.Downloader能异步的通过HTTP GET Request下载内容.他是一个能帮助Silverlight下载内容的一个对象,这些下载内容包括(XMAL content,JavaScript content,ZIP packages,Media,images).当Silverlight plug-in安装时候,并不能完全提供所有应用程序的内容,但在一经请求这些内容就会响应应用程序的需要.更重要的是,你能在呈现内容后它仍然能被使用,而且不需要刷新业面.Downloader对象提供了初始数据传输的功能,通过事件和状态性质监控数据传输过程,并重新找到数据过程.

这个Downloader 对象的属性和方法模仿XMLHttpRequest(XHR)的一系列的APIs.XHR提供 JavaScript和其他Web浏览器脚本语言来传输和操作通过HTTP来于web Server端的XML数据.

通常你不详细指定Downloader 的URI;但你能指定URIs,并使用URI的配置是最初在安装Silverlight plug-in所指定主机器的HTML页面的地址.Downloader不能被用来跨域下载文件(内容不是来于最初始主机也面的地址).

下面给出一个事列显示怎样create, initialize, and execute 一个下载请求.为一个 被操作者挂上两个事件是(Completed, DownloadProgressChanged),但被操作者没有被指定,还有DownloadFailed也没有被定义.所以你要自己写一个.

//  Event handler for initializing and executing a download request.
function  onMouseLeftButtonUp(sender, eventArgs)
{
    
// Retrieve a reference to the plug-in.
    var slPlugin = sender.getHost();

    
// Create a Downloader object.
    var downloader = slPlugin.createObject("downloader");

    
// Add DownloadProgressChanged and Completed events.
    downloader.addEventListener("downloadProgressChanged", onDownloadProgressChanged);
    downloader.addEventListener(
"completed", onCompleted);

    
// Initialize the Downloader request.
    // NOTE: downloader APIs disallow file:\\ scheme
    // you must run this sample over localhost: or off a server or the following call will fail

    downloader.open(
"GET""promo.png");

    
// Execute the Downloader request.
    downloader.send();
}



(2):DownloadFailed

    当下载请求完成时没有下载内容时触发.

参数:
  参数名描述  
 类型
  downloaderObject
 一个Downloader对象.Object
  token 是一个函数的返回值,能随意的保留如变量.如你想要调用RemoveEventLister去删除这个被操作者,你将需要这个参数  integer
  eventhandlerFunction 在脚本中被定义的你的事件函数名,当使用AddEventListener pararmeter,就不需要提供函数名. Object
事件参数:
  sender
  识别调用事件的对象 
 Object
  eventArgs  
 参数始终为 null    Object
   
         
DownloadFailed 当下载请求完成时没有下载内容时触发.异步的调用Downloader的Send方法.主要由Status和StatusText的属性来反应HTTP的状态值来确定错误的下载请求.


你还能在脚本中添加一个事件名来添加操作者:
downloaderObject.AddEventListener( " DownloadFailed " " eventhandlerFunction " )

这里就回返回一个token;删除操作时这个token就不是绝对需要,在这里是添加操作.所以需要.

DownloadFailed当下载请求完成时没有下载内容时触发,你使用一个Completed事件去取得Downloader对象所响应的文本.当你正在下载发生突发的错误,你将还是能添加一个DownloadFailed事件到你的应用程序和为DownloadFailed事件写入适当代码,最终解决你的内容不存在的问题.


(3)DownloadProgressChanged

在求情下载期间被出发.

参数:
  参数名描述  
 类型
  downloaderObject
 一个Downloader对象.Object
  token 是一个函数的返回值,能随意的保留如变量.如你想要调用RemoveEventLister去删除这个被操作者,你将需要这个参数  integer
  eventhandlerFunction 在脚本中被定义的你的事件函数名,当使用AddEventListener pararmeter,就不需要提供函数名. Object
事件参数:
  sender
  识别调用事件的对象 
 Object
  eventArgs  
 参数始终为 null    Object
   
         

DownloadProgressChanged 事件能被使用监控下载进程.DownloadProgressChanged是按照被下载内容总长度的0.05显示,最高可达到1.0.当下载状态改变时都将出发Completed 或DownloadFailed.

你还能在脚本中添加一个事件名来添加操作者:
downloaderObject.AddEventListener( " DownloadProgressChanged " " eventhandlerFunction " )

语法这里还是就回返回一个token;删除操作时这个token就不是绝对需要,在这里是添加操作.所以需要.

在事件数据中这个进程要数不能被转载.取而代之的是使用Downloader对象的属性触发事件.That object is always the sender of the event.
------------------------------------------------------------
//  Event handler for updating visual progress indicator
function  onDownloadProgressChanged(sender, eventArgs)
{
    
// Calculate the downloaded percentage.
    var percentage = Math.floor(sender.downloadProgress * 100);

    
// Update the Rectangle and TextBlock objects of the visual progress indicator.
    progressText.text = percentage + "%";
    progressRectangle.width 
= percentage * 2;
}



(4)Completed

在请求下载内容完成时触发.


Completed在请求下载内容完成时触发.异步的调用Downloader的Send方法.主要由Status和StatusText的性质来反应HTTP的状态值来确定错误的下载请求.

你还能在脚本中添加一个事件名来添加操作者:
downloaderObject.AddEventListener( " Completed " " eventhandlerFunction " )

语法这里还是就回返回一个token;删除操作时这个token就不是绝对需要,在这里是添加操作.所以需要.

Completed在请求下载内容完成时触发.并返回下载内容,你使用一个Completed事件去取得Downloader对象所响应的文本,在选择使用ResponseText性质或GetResponseText方法时.依赖于下载方式是否以包的形式,如是包的形式你就要指定part.
事例是定义一个取得下载内容的Completed事件函数,是单个文件下载(没有使用包)
//  Event handler for the Completed event.
function  onCompleted(sender, eventArgs)
{
    
// Retrieve downloaded XAML content.
    var xamlFragment = sender.ResponseText;

    
// Create the objects from the XAML content.
    var plugin = sender.getHost();
    
var button = plugin.content.createFromXaml(xamlFragment);

    
// Add downloaded XAML content to the root Canvas of the plug-in.
    var rootCanvas = sender.findName("rootCanvas");
    rootCanvas.children.add(button);
}



转载于:https://www.cnblogs.com/worksguo/articles/1083406.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值