詳解Silverlight中的Downloader對象

字號:

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