FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
Web Development
Email
Print
Reprint

add to:
Del.icio.us
Digg
Google
Furl
Slashdot
Y! MyWeb
Blink
TABLE OF CONTENTS
February 29, 2008

Working with Events in Silverlight

(Page 2 of 2)

Using Events to Download Files

Silverlight events can also be used in other ways that don't involve require user interaction. In Silverlight you can use a built-in Downloader object to download files used by an application on-the-fly. This functionality is useful when you need to download several images as an application initializes or need to download XAML fragments or other file types on demand as a user performs an action.

The Silverlight Downloader object exposes three events as in Table 2.

Event

Description

Completed

Fires when a download completes.

DownloadFailed

Fires when a download fails due to no content being returned.

DownloadProgressChanged

Fires as a download progresses and provides the percentage of the file that has been downloaded.

Table 1

Listing Three provides an example of using the Silverlight Downloader object and handling its events. The code starts by creating the Silverlight object instance using the standard Silverlight.createObjectEx() method. Within this method the onLoad event is hooked to an event handler of the same name. The onLoad() event handler creates the Downloader control using the CreateObject() method and then wires its events to their respective event handlers using the AddEventListener() method. Once the events are wired up it then defines the file to download and calls Send() to start the download.

As the file is downloaded the onDownloadProgressChanged() event handler is called which is used to get the download progress. The code then updates a TextBlock object's Text property with the percentage of the download that has completed. When the file download completes the onCompleted() event handler is called which provides the user with an updated status.

var _TB = null;
function CreateSilverlight()
{
  Silverlight.createObjectEx(
    {
      source: "MyApp.xaml",
      parentElement: document.body,
      id: "slControl",
      properties: { width: "100%", height: "100%", version: "1.0" },
      events: { onLoad: onLoad, onError: null }
    }
  );
}
function onLoad(control, context, rootElement)
{
    _TB = control.Content.FindName("tbProgress");
    var downloader = control.CreateObject("downloader");
    downloader.AddEventListener("DownloadProgressChanged", 
     onDownloadProgressChanged);
    downloader.AddEventListener("Completed", onCompleted);
    downloader.AddEventListener("DownloadFailed", onDownloadFailed);
    downloader.Open("GET", "MyFiles.zip?" + new Date()); 
    downloader.Send();
}
function onDownloadProgressChanged(sender, eventArgs)
{
    var percentComplete = sender.DownloadProgress * 100;
    _TB.Text = Math.floor(percentComplete) + "%";
}
function onCompleted(sender, eventArgs)
{
    _TB.Text = "Download complete!";
    //Access files that were downloaded
}
Function onDownloadFailed(sender, eventArgs)
{
    //eventArgs will always be null in this event handler
    alert("Download failed");
}
Listing Three: Handling events exposed by Silverlight's Downloader object.

Conclusion

Events are where it's at in the world of application development. By defining events in XAML and handling them in JavaScript you can build a Silverlight application that is responsive to end user actions.

Previous Page | 1 Introduction | 2 Using Events to Download Files
TOP 5 ARTICLES
No Top Articles.



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK