Partager via


Comment : rendre persistantes et restaurer les propriétés de portée application d'une session d'application à l'autre

Cet exemple montre comment rendre persistantes les propriétés d’étendue de l’application lorsqu’une application s’arrête et comment restaurer les propriétés d’étendue de l’application lorsqu’une application est lancée.

Exemple

L’application conserve les propriétés d’étendue de l’application et les restaure à partir du stockage isolé. Le stockage isolé est une zone de stockage protégée qui peut être utilisée en toute sécurité par les applications sans autorisation d’accès aux fichiers. Le fichier App.xaml définit la App_Startup méthode comme gestionnaire de l’événement Application.Startup et la App_Exit méthode comme gestionnaire de l’événement Application.Exit , comme indiqué dans les lignes mises en surbrillance du code XAML suivant :

Remarque

Le code XAML suivant est écrit pour CSharp. La version de Visual Basic omet la déclaration de classe.

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

Cet exemple montre le code-behind de l’application, qui contient les gestionnaires d’événements pour le code XAML. La App_Startup méthode restaure les propriétés d’étendue de l’application et la méthode enregistre les propriétés d’étendue de l’application App_Exit .

using System.IO.IsolatedStorage;
using System.IO;
using System.Windows;

namespace SDKSamples
{
    public partial class App : Application
    {
        string _filename = "App.data";

        public App()
        {
            // Initialize application-scope property
            Properties["NumberOfAppSessions"] = "0";
        }

        private void App_Startup(object sender, StartupEventArgs e)
        {
            // Restore application-scope property from isolated storage
            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
            try
            {
                if (storage.FileExists(_filename))
                {
                    using (IsolatedStorageFileStream stream = storage.OpenFile(_filename, FileMode.Open, FileAccess.Read))
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        // Restore each application-scope property individually
                        while (!reader.EndOfStream)
                        {
                            string[] keyValue = reader.ReadLine().Split(new char[] { ',' });
                            Properties[keyValue[0]] = keyValue[1];
                        }
                    }
                }
            }
            catch (DirectoryNotFoundException ex)
            {
                // Path the file didn't exist
            }
            catch (IsolatedStorageException ex)
            {
                // Storage was removed or doesn't exist
                // -or-
                // If using .NET 6+ the inner exception contains the real cause
            }
        }

        private void App_Exit(object sender, ExitEventArgs e)
        {
            // Increase the amount of times the app was opened
            Properties["NumberOfAppSessions"] = int.Parse((string)Properties["NumberOfAppSessions"]) + 1;

            // Persist application-scope property to isolated storage
            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
            using (IsolatedStorageFileStream stream = storage.OpenFile(_filename, FileMode.Create, FileAccess.Write))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // Persist each application-scope property individually
                foreach (string key in Properties.Keys)
                    writer.WriteLine("{0},{1}", key, Properties[key]);
            }
        }
    }

}
Imports System.IO
Imports System.IO.IsolatedStorage

Class Application

    Private _filename As String = "App.data"

    Public Sub New()
        ' Initialize application-scope property
        Properties("NumberOfAppSessions") = "0"
    End Sub

    Private Sub App_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
        ' Restore application-scope property from isolated storage
        Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForDomain()
        Try
            If storage.FileExists(_filename) Then

                Using stream As IsolatedStorageFileStream = storage.OpenFile(_filename, FileMode.Open, FileAccess.Read)
                    Using reader As New StreamReader(stream)

                        ' Restore each application-scope property individually
                        Do While Not reader.EndOfStream
                            Dim keyValue() As String = reader.ReadLine().Split(New Char() {","c})
                            Properties(keyValue(0)) = keyValue(1)
                        Loop

                    End Using
                End Using

            End If

        Catch ex As DirectoryNotFoundException
            ' Path the file didn't exist
        Catch ex As IsolatedStorageException
            ' Storage was removed or doesn't exist
            ' -or-
            ' If using .NET 6+ the inner exception contains the real cause
        End Try
    End Sub

    Private Sub App_Exit(ByVal sender As Object, ByVal e As ExitEventArgs)
        'Increase the amount of times the app was opened
        Properties("NumberOfAppSessions") = Integer.Parse(DirectCast(Properties("NumberOfAppSessions"), String)) + 1

        ' Persist application-scope property to isolated storage
        Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForDomain()

        Using stream As IsolatedStorageFileStream = storage.OpenFile(_filename, FileMode.Create, FileAccess.Write)
            Using writer As New StreamWriter(stream)

                ' Persist each application-scope property individually
                For Each key As String In Properties.Keys
                    writer.WriteLine("{0},{1}", key, Properties(key))
                Next key

            End Using
        End Using
    End Sub

End Class