How to: Persist and Restore Application-Scope Properties Across Application Sessions

This example shows how to persist application-scope properties when an application shuts down, and how to restore application-scope properties when an application is next launch.

Example

The application persists application-scope properties to, and restores them from, isolated storage. Isolated storage is a protected storage area that can safely be used by applications without file access permission.

<Application x:Class="HOWTOApplicationModelSnippets.App"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml" 
    Startup="App_Startup" 
    Exit="App_Exit">

    ...

</Application>
using System;
using System.Windows;
using System.IO;
using System.IO.IsolatedStorage;

public partial class App : Application
{
    string filename = "App.txt";


...

    private void App_Startup(object sender, StartupEventArgs e)
    {
        // Restore application-scope property from isolated storage
        IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
        try
        {
            using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(filename, FileMode.Open, storage))
            using (StreamReader reader = new StreamReader(stream))
            {
                // Restore each application-scope property individually
                while (!reader.EndOfStream)
                {
                    string[] keyValue = reader.ReadLine().Split(new char[] {','});
                    this.Properties[keyValue[0]] = keyValue[1];
                }
            }
        }
        catch (FileNotFoundException ex)
        {
            // Handle when file is not found in isolated storage:
            // * When the first application session
            // * When file has been deleted

...

        }
    }

    private void App_Exit(object sender, ExitEventArgs e)
    {
        // Persist application-scope property to isolated storage
        IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(filename, FileMode.Create, storage))
        using (StreamWriter writer = new StreamWriter(stream))
        {
            // Persist each application-scope property individually
            foreach (string key in this.Properties.Keys)
            {
                writer.WriteLine("{0},{1}", key, this.Properties[key]);
            }
        }
    }
}