問題現象:
在實際應用過程中,常常是在操作一個程式時,會突然插入新的任務,當前任務就要提交到後台,去執行新的程式。正比如,一個使用者正在註冊一個網站,正在填寫表單資訊,但是一個優先順序更高的任務需要解決,這樣會用到Back或Start按鍵來選擇其他動作。如果註冊表單的資料不儲存的話,在重新載入該頁面時可能會遺失資料,這對使用者來說是很差的體驗。本篇就要解決這樣的問題。
程式案例:
MainPage只有一個TextBox。有TextBox的myTextBox_TextChanged事件和MainPage的Root_Loaded事件:
流程是這樣的:
首先,在TextBox輸入內容,根據myTextBox_TextChanged事件儲存到phoneAppService.State中,通過APP.xaml.cs檔案中的Application_Launching、Application_Activated、Application_Deactivated、Application_Closing事件來儲存和讀取phoneAppService.State資料到隔離儲存區 (Isolated Storage)IsolatedStorageSetting中。
因為phoneAppService.State資料在Back或Start之後會被記憶體刪掉的,只能儲存到隔離儲存區 (Isolated Storage)的特殊功能上。
切記:模擬器重啟(相當於真機重啟)之後都不會儲存。
private void myTextBox_TextChanged(object sender, TextChangedEventArgs e) { //儲存文字框的內容 PhoneApplicationService phoneAppService = PhoneApplicationService.Current; phoneAppService.State["myValue"] = myTextBox.Text; } private void Root_Loaded(object sender, RoutedEventArgs e) { PhoneApplicationService phoneAppService = PhoneApplicationService.Current; if (phoneAppService.State.ContainsKey("myValue")) { myTextBox.Text = phoneAppService.State["myValue"].ToString(); } }
-------------------------------
APP.xaml.cs檔案:
// 應用程式啟動(例如,從“開始”菜單啟動)時執行的代碼 // 此代碼在重新啟用應用程式時不執行 private void Application_Launching(object sender, LaunchingEventArgs e) { LoadMyValue(); } // 啟用應用程式(置於前台)時執行的代碼 // 此代碼在初次開機應用程式時不執行 private void Application_Activated(object sender, ActivatedEventArgs e) { LoadMyValue(); } // 停用應用程式(發送到後台)時執行的代碼 // 此代碼在應用程式關閉時不執行 private void Application_Deactivated(object sender, DeactivatedEventArgs e) { SaveMyValue(); } // 應用程式關閉(例如,使用者點擊“後退”)時執行的代碼 // 此代碼在停用應用程式時不執行 private void Application_Closing(object sender, ClosingEventArgs e) { SaveMyValue(); } private void SaveMyValue() { PhoneApplicationService phoneAppService = PhoneApplicationService.Current; IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings; if (phoneAppService.State.ContainsKey("myValue")) { setting["myValue"] = phoneAppService.State["myValue"]; } } private void LoadMyValue() { PhoneApplicationService phoneAppService = PhoneApplicationService.Current; IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings; if (setting.Contains("myValue")) { phoneAppService.State["myValue"] = setting["myValue"]; } }