Практикум
Создание внебраузерного приложения Silverlight
Для выполнения данного практического задания необходимо средство разработки Visual Studio.
Задание
Разработать простейшее приложение Silverlight. Модифицировать его для установки на клиентском компьютере, инсталлировать и деинсталлировать приложение. Модифицировать приложение, чтобы оно могло быть обновлено, обновить приложение. Модифицировать приложение, чтобы оно могло определять наличие подключения к Интернет, проверить работу отключив сетевой интерфейс.
Установка на клиентском компьютере
Создаем проект Silverlight, как описано в разделе " Создание простого приложения Silverlight", согласно рис. P1, рис. P.2 и рис. P.3. Добавляем в проект файл (Add existing Item) - иконку icon16.png, icon32.png, icon48.png, icon128.png. Открываем свойства проекта Silverlight. И включаем свойство "Enable running application out of the browser". Кроме этого задаем свойства "Out-Of-Browser Settings". Используем в качестве иконки добавленный рисунок.
Добавим небольшой текст в MainPage.xaml, который будет отображать состояние приложения.
<TextBlock x:Name="textBox" Text="Приложение Silverlight. Версия 1" HorizontalAlignment="Left"/>
Запустим приложение и щелкнем правом клавишей мыши. Появится диалоговое окно, предлагающее установить приложение на компьютер.
Нажимаем установить, затем выбираем места, в которые будут размещены ярлыки
Приложение сразу же запустится. Обратите внимание на появление ярлыков на рабочем столе и в меню программ. Теперь удалим его, щелкнув правой клавишей мыши внутри работающего приложения.
Тоже самое можно сделать и в браузере. Приложение также будет удалено.
Добавим в приложение код (файл MainPage.xaml.cs), позволяющий определить работает приложение в браузере или нет.
public MainPage() { InitializeComponent(); if (App.Current.IsRunningOutOfBrowser) { textBox.Text += ". Работа локально"; } else { textBox.Text += ". Работа в броузере"; } }
Запускаем отладку и устанавливаем приложение локально, должно получиться:
Добавим кнопку, при нажатии на которую приложение будет установлено или удалено.
<Button x:Name="buttonInstall" Click="Button_Click" HorizontalAlignment="Left"/>
И код в описание класса MainPage():
if (App.Current.InstallState == System.Windows.InstallState.Installed) { buttonInstall.Content = "Установлено"; } else { buttonInstall.Content = " Не установлено. Установить"; } App.Current.InstallStateChanged += new EventHandler(Current_InstallStateChanged);
В зависимости от состояния установки, изменяется надпись на кнопке. Кроме того, добавляется обработчик события изменения состояния установки:
void Current_InstallStateChanged(object sender, EventArgs e) { if (App.Current.InstallState == System.Windows.InstallState.Installed) { buttonInstall.Content = "Установлено"; } else { buttonInstall.Content = " Не установлено. Установить"; } }
Обработчик событий нажатия кнопки:
private void Button_Click(object sender, RoutedEventArgs e) { if (App.Current.InstallState == System.Windows.InstallState.NotInstalled) { App.Current.Install(); } }
После запуска должно быть:
При нажатии на кнопку приложение будет установлено.
Обновление приложения
Добавим кнопку и текст на страницу, а также, код в MainPage.xaml.cs, позволяющий отследить версию приложения и сразу же обновить его:
<TextBlock x:Name="textBox1" HorizontalAlignment="Left"/> <Button x:Name="buttonUpdate" Content="Проверить обновления" Click="Button1_Click" HorizontalAlignment="Left"/> private void Button1_Click(object sender, RoutedEventArgs e) { App.Current.CheckAndDownloadUpdateAsync(); App.Current.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler (Current_CheckAndDownloadUpdateCompleted); } void Current_CheckAndDownloadUpdateCompleted (object sender, CheckAndDownloadUpdateCompletedEventArgs e) { if (e.UpdateAvailable) { textBox1.Text = "Установлены обновления. Перезапустите приложение"; } else { textBox1.Text = "Новых обновлений нет"; } }
Запустим приложение в браузере и установим его, предварительно удалив старое. Затем изменим текст надписи в проекте на "Приложение Silverlight. Версия 2" и откомпилируем приложение 2-ой версии. Запустим приложение локально и нажмем на кнопку "Проверить обновления". Затем перезапустим его. Получим:
При работе в браузере обновления, естественно, не проверяются, т.к. работает всегда свежая версия.
Проверка подключения к Интернету
Добавим в xaml файл текстовый блок:
<TextBlock x:Name="networkIndicator" HorizontalAlignment="Left"/>
Он будет отражать состояние сети. В код добавим:
using System.Net.NetworkInformation;
и в конструктор класса MainPage():
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler (NetworkChange_NetworkAddressChanged); bool online = NetworkInterface.GetIsNetworkAvailable(); networkIndicator.Text = online ? "ONLINE" : "OFFLINE";
А также, обработчик события NetworkAddressChanged:
void NetworkChange_NetworkAddressChanged(object sender, EventArgs e) { networkIndicator.Visibility = App.Current.IsRunningOutOfBrowser ? Visibility.Visible : Visibility.Collapsed; bool online = NetworkInterface.GetIsNetworkAvailable(); networkIndicator.Text = online ? "ONLINE" : "OFFLINE"; }
Скомпилируем проект. Проверим обновления локального приложения и перезапустим его. Теперь откроем "Центр управления сетями и общим доступом" из панели управления Windows и откроем "Сетевые подключения". Теперь отключим действующее сетевое подключение:
Запустим приложение, должны увидеть следующее:
Теперь, не закрывая, приложение включим сеть. Приложение через некоторое время определит, что сеть есть.
Заключение
На данном практическом занятии мы создали Silverlight приложение, которое установили для работы локально. Рассмотрели вопросы обновления внебраузерных приложений и поддержку работы без подключения к интернету. Исходный код находится в файле