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
.NET Desktop feedback