初學Silverlight,記錄下自己的成長,也與大家一起分享。
剛開始寫博客,不妥之處請多多指正@:)
您的支持和回覆是我最大的動力
環境:Win 2003 server SP2 , Silverlight 4.0 ,IE7.0
瀏覽器外運行(Out Of Browser),從Silverlight 3.0 版本開始支持,添加了可以脫離瀏覽器運行的功能。
將程序下載到本地運行,通過快捷方式打開Silverlight程序,so cool!
具體實現也非常容易,本文核心部分在於解決瀏覽器外運行的應用程序更新問題,即當用戶下載到本地後,服務器發佈了新版本,如何支持自動更新。
首先,新建Silverlight應用程序,命名爲OutOfBrowser,默認創建承載應用程序的網站名稱爲OutOfBrowser.Web.如下圖所示,點擊確定。
創建的解決方案默認情況:
打開MainPage.xaml文件,新增一個TextBlock控件,Text屬性修改爲“君不見黃河之水天上來”:
<UserControl x:Class="OutOfBrowser.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">
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBlock1" Text="君不見黃河之水天上來" VerticalAlignment="Top" />
</Grid>
</UserControl>
右鍵點擊OutOfBrowser項目,選擇“屬性”,在Silverlight選項卡中,選中“允許在瀏覽器外運行程序”:
生成OutOfBrowser項目,在OutOfBrowser.Web項目的ClientBin目錄下,自動加載了OutOfBrowser.xap文件。此時在OutOfBrowser.Web中右鍵點擊OutOfBrowserTestPage.aspx頁面,選擇“在瀏覽器中查看”,頁面顯示“君不見黃河之水天上來”。右鍵點擊頁面,選擇“將OutOfBrowser應用程序安裝到此計算機”,可以選中在開始菜單及桌面上添加快捷方式。安裝後,自動打開頁面,展示內容相同。
關閉網頁和彈出的應用程序。修改MainPage.xaml文件中的文本框內容,增加一句話:“奔流到海不復回”,生成項目,瀏覽網頁,頁面顯示更新後的內容:“君不見黃河之水天上來,奔流到海不復回”。運行桌面版的應用程序,仍然顯示原內容:“君不見黃河之水天上來”。問題出現,如何在程序安裝到桌面後,自動更新新版本?
下面來解決這個問題。
打開OutOfBrowser項目中App.xaml.cs,在public App()函數中,添加更新事件:
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
//檢查更新
this.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(App_CheckAndDownloadUpdateCompleted);
this.CheckAndDownloadUpdateAsync();
InitializeComponent();
}
CheckAndDownloadUpdateAsync方法以異步方式檢查更新(如果需要,則下載最新版本)
當應用程序已經完成更新檢查並下載完成後,將觸發CheckAndDownloadUpdateCompleted事件。
我們在此實現App_CheckAndDownloadUpdateCompleted方法:
//檢查更新並下載完畢
void App_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
//throw new NotImplementedException();
if (e.UpdateAvailable)
{
MessageBox.Show("發現新版本的Silverlight應用程序" +
",請重新啓用您的應用程序!");
}
else if (e.Error != null &&
e.Error is PlatformNotSupportedException)
{
MessageBox.Show("發現新版本Silverlight應用程序," +
"但是不能運行在您的Silverlight版本中,請訪問程序主頁更新。");
}
else
{
MessageBox.Show("沒有新版本應用程序需要更新!");
}
}
編譯應用程序,並運行。在頁面上點擊右鍵,刪除應用程序,然後重新安裝。安裝完畢後,自動打開桌面版應用程序,並彈出提示信息“沒有新版本應用程序需要更新!”。說明檢查更新的功能已經調用。下面測試是否正常運行。
再次修改MainPage.xaml文件中的文本框內容,增加一句話:“君不見高堂明鏡悲白髮,朝如青絲暮成雪”,生成項目,瀏覽網頁,頁面顯示更新後的內容:“君不見黃河之水天上來,奔流到海不復回.君不見高堂明鏡悲白髮,朝如青絲暮成雪.”。
運行桌面版的應用程序,提示有新版本需要更新,更新後,提示用戶重新啓動。關閉應用程序,重新啓動,提示沒有新版本,說明已經更新,再看內容,也是最新的版本。程序按照我們的邏輯正常運行並生效。
這種提示方式旨在驗證更新的機制,大家可以根據實際需要進行修改和拓展。
暫時不曉得如何上傳源碼,有需要的朋友可以留下郵箱地址。
其實貌似已經夠詳細了~