Silverlight中有一個(gè)Downloader對(duì)象,可以用來(lái)下載Silverlight應(yīng)用程序中相應(yīng)的文件,比如腳本、媒體文件等等。有了它就可以根據(jù)應(yīng)用程序的具體需要來(lái)下載相應(yīng)的文件,而不必在Silverlight插件初始化的時(shí)候就將整個(gè)應(yīng)用程序所需要的文件全部下載下來(lái)。這樣不僅可以節(jié)省用戶下載應(yīng)用程序所花費(fèi)的等待時(shí)間,還可以直接在應(yīng)用程序中動(dòng)態(tài)使用下載下來(lái)的內(nèi)容而無(wú)需刷新整個(gè)頁(yè)面。
Downloader對(duì)象能夠初始化數(shù)據(jù)傳輸,監(jiān)視數(shù)據(jù)傳輸?shù)倪M(jìn)程,并能很方便的得到所下載的文件。加載應(yīng)用程序時(shí)的進(jìn)度條的實(shí)現(xiàn)就需要用到Downloader這個(gè)對(duì)象的強(qiáng)大功能。此外,Downloader對(duì)象還可以用來(lái)下載ZIP壓縮包,并可以從所下載的ZIP包中獲取單個(gè)文件。
要使用Downloader對(duì)象,首先要使用Silverlight的CreateObject方法在Silverlight插件中創(chuàng)建一個(gè)Downloader的對(duì)象實(shí)例。Downloader中有以下幾個(gè)常用的方法:
◆ Open方法用來(lái)實(shí)例化Downloader對(duì)象,并用來(lái)指定要下載的內(nèi)容。這個(gè)方法包含兩個(gè)類型為字符串的參數(shù):第一個(gè)參數(shù)指定了下載的行為,目前只支持"GET";第二個(gè)參數(shù)是一個(gè)URI,指明了下載的文件。
◆ Send方法用來(lái)執(zhí)行下載的請(qǐng)求。該方法不包含任何參數(shù),并用異步方法下載文件。
由于Downloader對(duì)象用異步方法下載文件,因此對(duì)下載后的文件操作一般都是通過(guò)事件觸發(fā)的方法來(lái)執(zhí)行的。可以使用addEventListener方法為Downloader的對(duì)象實(shí)例添加事件監(jiān)聽。addEventListener方法包含兩個(gè)參數(shù):第一個(gè)參數(shù)指明了所要偵聽的Downloader事件;第二個(gè)參數(shù)指明了事件處理姆椒ownloader對(duì)象一共有三個(gè)事件:
◆ Completed事件在下載請(qǐng)求完成,并返回下載內(nèi)容的時(shí)候觸發(fā)。
◆ DownloadFailed事件在下載失敗時(shí)返回。
◆ DownloadProgressChanged事件在下載過(guò)程中觸發(fā)。
一個(gè)使用Downloader對(duì)象的例子
function onDemandLoaded(sender, eventArgs)
...{
//首先得到當(dāng)前Silverlight插件的引用
var SilverlightPlugin = sender.getHost();
//創(chuàng)建一個(gè)Downloader對(duì)象
var downloader = SilverlightPlugin.createObject("downloader");
//初始化Downloader對(duì)象
downloader.open("GET", "myPage.xaml");
//執(zhí)行下載請(qǐng)求
downloader.send();
//添加事件偵聽
downloader.addEventListener("downloadProgressChanged", onDownloadProgressChanged);
downloader.addEventListener("completed", onCompleted);
}
function onDownloadProgressChanged(sender, eventArgs)
...{
//sender返回的即是已下載的文件對(duì)象
}
function onCompleted(sender, eventArgs)
...{
}