我曾经在 Sun 的技术会议上见过这种技术,可惜 Sun 已不在了,当时那个主持人说起这个技术还一脸得意,现在在 Silverlight 下,实现起来竟是如此简单。
ok, Silverlight 必然要具备脱离浏览器和离线的能力,无论是 MS 的主观意愿还是客观的 WP7 的开发要求,这都是必须的。 不能不说,微软对浏览器是又爱又恨的,显然它意识到了浏览器的重要性,才不惜违法击垮Netscape,但现在还是在浏览器这个框框里落后了。So,如果有机会把战场跳出这个框框.....
言归正传,先说一下如何判断在线状态,显然你在做分别做在线和离线处理时,是需要先判断下的。
页面中添加一个
<Ellipse x:Name="ellipseIndicator" Height="82" HorizontalAlignment="Center" Stroke="Black" Fill="Gray" StrokeThickness="1" VerticalAlignment="Top" Width="86" /> 来指示状态
下面是cs(不能叫后台)代码
 public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
            UpdateIndicator();
        }
        private void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
        {
            UpdateIndicator();
        }
        private void UpdateIndicator()
        {
            if (NetworkInterface.GetIsNetworkAvailable())
            {
                this.ellipseIndicator.Fill = new SolidColorBrush(Colors.Green);
            }
            else
            {
                this.ellipseIndicator.Fill = new SolidColorBrush(Colors.Red);
            }
        }
    }
好了我知道E文不好的你有问题了,答案是NetworkAddressChanged这个事件会在运行端网络地址发生变化的时候触发。
下面另一个知识点,看一下怎么将程序脱离浏览器,和前面一个知识点显然是关联的,试想如果用户在离线状态下刷新浏览器,那你的Silverlight页面会变成什么样?(2种情况,你自己试吧),脱离浏览器是处理离线或不能总是在线这种状态的必要条件,如移动设备。显然这意味着将程序要安装到本地。
看见了,那个网络管理员举手了,不用问了,这就回答你的问题:Silverlight applications running out-of-browser are subject to the same
security restrictions as those running inside of a browser.
好了,具体做法是
右键点击 Project ,点击 property

更多内容敬请点击 out-of-browser settings
设定完就可以F5,然后点击右键试试就明白了。这里要提醒的是,从易用性来说最好给用户一个直观的按钮,让用户可以 安装 及 更新 程序。详细例子如下,包括自动更新的按钮:
<UserControl x:Class="OutOfBrowserTestApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Grid x:Name="LayoutRoot" Background="White">
        <Button x:Name="btnInstallLocally" Content="Install Locally" Click="btnInstallLocally_Click" Height="23" Width="109" HorizontalAlignment="Left" Margin="12,30,0,0" VerticalAlignment="Top"/>
        <Button Height="23" Width="109" Content=" Check Update" Click="Button_Click"/>
        <sdk:Label Height="28" HorizontalAlignment="Left" Margin="29,127,0,0" Name="label1" VerticalAlignment="Top" Width="120" Content="hahahehea" />
    </Grid>
</UserControl>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace OutOfBrowserTestApp
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private void btnInstallLocally_Click(object sender,RoutedEventArgs e)
        {
            if (Application.Current.InstallState == InstallState.Installed)
            {
                MessageBox.Show("Application already installed");
            }
            else
            {
                Application.Current.Install();
            }
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            App.Current.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(App_CheckAndDownloadUpdateCompleted);
            App.Current.CheckAndDownloadUpdateAsync();
        }
        private void App_CheckAndDownloadUpdateCompleted(object sender,CheckAndDownloadUpdateCompletedEventArgs e)
        {
            if (e.UpdateAvailable)
            {
                MessageBox.Show("An application update has been downloaded. Restart the application to run the new version.");
            }
            else if (e.Error != null && e.Error is PlatformNotSupportedException)
            {
                MessageBox.Show("An application update is available, but it requires a new version of Silverlight. Visit the application home page to upgrade.");
            }
            else
            {
                MessageBox.Show("There is no update available.");
            }
        }
    }
}
待续...
 
                    
                 
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号