博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight:Downloader的使用(event篇)
阅读量:6248 次
发布时间:2019-06-22

本文共 4236 字,大约阅读时间需要 14 分钟。


(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);
}
你可能感兴趣的文章
多线程服务器的常用编程模型(转)
查看>>
k8s 如何 Failover?- 每天5分钟玩转 Docker 容器技术(127)
查看>>
C#List 泛型类使用(摘自MSDN)
查看>>
ubuntu下给php配置redis
查看>>
js 页面刷新location.reload和location.replace的区别小结
查看>>
我的友情链接
查看>>
Python OpenCV实例:马赛克效果
查看>>
“.中国”域名注册量超27.3万:6月份净增254个
查看>>
域名商年度报告:2014年51DNS域名总量达110万
查看>>
5月“.中国”域名总量跌至26.6万个 净减1165个
查看>>
7月12日28家中国域名商六类国际域名注册保有量统计
查看>>
7月第4周网络安全报告:被篡改的.COM网站占75.4%
查看>>
11月23日全球域名商解析量TOP22:爱名网升至十九名
查看>>
【DHGate】2014-09-24项目总结
查看>>
改善用户体验的药方
查看>>
Kubernetes审计日志方案
查看>>
容器安全拾遗 - Rootless Container初探
查看>>
ERROR 2002 (HY000) Can’t connect to local MySQL server through socket ‘var mysql 启动不了
查看>>
数据库SQL优化大总结之 百万级数据库优化方案
查看>>
mysql unrecognized service问题解决
查看>>