Condividi tramite


Procedura: salvare in modo permanente e ripristinare le proprietà con ambito applicazione tra le sessioni di un'applicazione

Questo esempio illustra come rendere persistenti le proprietà dell'ambito dell'applicazione quando un'applicazione viene arrestata e come ripristinare le proprietà dell'ambito dell'applicazione al successivo avvio di un'applicazione.

Esempio

L'applicazione mantiene le proprietà dell'ambito dell'applicazione in e le ripristina dall'archiviazione isolata. L'archiviazione isolata è un'area di archiviazione protetta che può essere usata in modo sicuro dalle applicazioni senza autorizzazioni di accesso ai file. Il file App.xaml definisce il App_Startup metodo come gestore per l'evento Application.Startup e il App_Exit metodo come gestore per l'evento Application.Exit , come illustrato nelle righe evidenziate del codice XAML seguente:

Nota

Il codice XAML seguente viene scritto per CSharp. La versione di Visual Basic omette la dichiarazione di 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>

Questo esempio seguente mostra il code-behind dell'applicazione, che contiene i gestori eventi per XAML. Il App_Startup metodo ripristina le proprietà dell'ambito applicazione e il App_Exit metodo salva le proprietà dell'ambito applicazione.

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