www.pudn.com > ApplicationLifecycle.zip > App.xaml.cs, change:2011-07-10,size:7421b


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.Navigation; 
using System.Windows.Shapes; 
using Microsoft.Phone.Controls; 
using Microsoft.Phone.Shell; 
using System.Diagnostics; 
using System.IO.IsolatedStorage; 
 
namespace ApplicationLifecycle 
{ 
    public partial class App : Application 
    { 
        public static string PersistedData { get; set; }//设置永久数据的属性,做程序时应该考虑哪些是临时数据,哪些是永久数据 
        private const string PersistedDataSetting = "PersistedDataSetting1";//需要运用IsolatedStorage 
        public static string TransientData { get; set; }//设置临时数据的属性 
        private const string TransientDataState = "TransientDataState1"; 
 
        /// <summary> 
        /// Provides easy access to the root frame of the Phone Application. 
        /// </summary> 
        /// <returns>The root frame of the Phone Application.</returns> 
        public PhoneApplicationFrame RootFrame { get; private set; } 
 
        /// <summary> 
        /// Constructor for the Application object. 
        /// </summary> 
        public App() 
        { 
            // Global handler for uncaught exceptions.  
            UnhandledException += Application_UnhandledException; 
 
            // Show graphics profiling information while debugging. 
            if (System.Diagnostics.Debugger.IsAttached) 
            { 
                // Display the current frame rate counters. 
                Application.Current.Host.Settings.EnableFrameRateCounter = true; 
 
                // Show the areas of the app that are being redrawn in each frame. 
                //Application.Current.Host.Settings.EnableRedrawRegions = true; 
 
                // Enable non-production analysis visualization mode,  
                // which shows areas of a page that are being GPU accelerated with a colored overlay. 
                //Application.Current.Host.Settings.EnableCacheVisualization = true; 
            } 
 
            // Standard Silverlight initialization 
            InitializeComponent(); 
 
            // Phone-specific initialization 
            InitializePhoneApplication(); 
        } 
 
        // Code to execute when the application is launching (eg, from Start) 
        // This code will not execute when the application is reactivated 
        private void Application_Launching(object sender, LaunchingEventArgs e)//程序启动时调用的事件 
        { 
            Debug.WriteLine("TOMBSTONE: Application_Launching at {0}", DateTime.Now.ToLongTimeString()); 
            using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())//运用IsolatedStorage 
            { 
                if (IsolatedStorageSettings.ApplicationSettings.Contains(PersistedDataSetting))//第一次可能不存在,防止抛出异常 
                { 
                    PersistedData = IsolatedStorageSettings.ApplicationSettings[PersistedDataSetting] as string; 
                } 
            } 
        } 
 
        // Code to execute when the application is activated (brought to foreground) 
        // This code will not execute when the application is first launched 
        private void Application_Activated(object sender, ActivatedEventArgs e)//程序重新激活时调用的事件 
        { 
            Debug.WriteLine("TOMBSTONE: Application_Activated at {0}", DateTime.Now.ToLongTimeString()); 
            if (PhoneApplicationService.Current.State.ContainsKey(TransientDataState))//判断是否存在 
            { 
                TransientData = PhoneApplicationService.Current.State[TransientDataState] as string;//存在,就把它读出来 
                PhoneApplicationService.Current.State.Remove(TransientDataState);//读成功之后,将它删掉 
            } 
        } 
 
        // Code to execute when the application is deactivated (sent to background) 
        // This code will not execute when the application is closing 
        private void Application_Deactivated(object sender, DeactivatedEventArgs e)//程序失去激活时调用的事件 
        { 
            Debug.WriteLine("TOMBSTONE: Application_Deactivated at {0}", DateTime.Now.ToLongTimeString()); 
            PhoneApplicationService.Current.State[TransientDataState] = TransientData;//写进去,要用的时候需要在Application_Activated中读出来 
        } 
 
        // Code to execute when the application is closing (eg, user hit Back) 
        // This code will not execute when the application is deactivated 
        private void Application_Closing(object sender, ClosingEventArgs e)//程序关闭时调用的事件 
        { 
            Debug.WriteLine("TOMBSTONE: Application_Closing at {0}", DateTime.Now.ToLongTimeString()); 
            using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) 
            { 
                IsolatedStorageSettings.ApplicationSettings[PersistedDataSetting] = PersistedData; 
            } 
        } 
 
        // Code to execute if a navigation fails 
        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) 
        { 
            if (System.Diagnostics.Debugger.IsAttached) 
            { 
                // A navigation has failed; break into the debugger 
                System.Diagnostics.Debugger.Break(); 
            } 
        } 
 
        // Code to execute on Unhandled Exceptions 
        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
        { 
            if (System.Diagnostics.Debugger.IsAttached) 
            { 
                // An unhandled exception has occurred; break into the debugger 
                System.Diagnostics.Debugger.Break(); 
            } 
        } 
 
        #region Phone application initialization 
 
        // Avoid double-initialization 
        private bool phoneApplicationInitialized = false; 
 
        // Do not add any additional code to this method 
        private void InitializePhoneApplication() 
        { 
            if (phoneApplicationInitialized) 
                return; 
 
            // Create the frame but don't set it as RootVisual yet; this allows the splash 
            // screen to remain active until the application is ready to render. 
            RootFrame = new PhoneApplicationFrame(); 
            RootFrame.Navigated += CompleteInitializePhoneApplication; 
 
            // Handle navigation failures 
            RootFrame.NavigationFailed += RootFrame_NavigationFailed; 
 
            // Ensure we don't initialize again 
            phoneApplicationInitialized = true; 
        } 
 
        // Do not add any additional code to this method 
        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) 
        { 
            // Set the root visual to allow the application to render 
            if (RootVisual != RootFrame) 
                RootVisual = RootFrame; 
 
            // Remove this handler since it is no longer needed 
            RootFrame.Navigated -= CompleteInitializePhoneApplication; 
        } 
 
        #endregion 
    } 
}