Cómo: Conservar y restaurar propiedades en el ámbito de aplicación a través de sesiones de aplicación
Artículo
En este ejemplo, se muestra cómo conservar las propiedades en el ámbito de la aplicación cuando se cierra una aplicación y cómo restaurarlas cuando se inicia una aplicación.
Ejemplo
La aplicación conserva las propiedades del ámbito de la aplicación y las restaura desde el almacenamiento aislado. El almacenamiento aislado es un área de almacenamiento protegida que las aplicaciones pueden usar de forma segura sin permiso de acceso a archivos. El archivo App.xaml define el método App_Startup como controlador para el evento Application.Startup y el método App_Exit como controlador para el evento Application.Exit, como se muestra en las líneas resaltadas del siguiente código XAML:
Nota
El siguiente código XAML está escrito para CSharp. La versión de Visual Basic omite la declaración de clase.
En este ejemplo se muestra el código subyacente de la aplicación, que contiene los controladores de eventos para el código XAML. El método App_Startup restaura las propiedades del ámbito de la aplicación y el método App_Exit guarda las propiedades del ámbito de la aplicación.
C#
using System.IO.IsolatedStorage;
using System.IO;
using System.Windows;
namespaceSDKSamples
{
publicpartialclassApp : Application
{
string _filename = "App.data";
publicApp()
{
// Initialize application-scope property
Properties["NumberOfAppSessions"] = "0";
}
privatevoidApp_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 individuallywhile (!reader.EndOfStream)
{
string[] keyValue = reader.ReadLine().Split(newchar[] { ',' });
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
}
}
privatevoidApp_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 individuallyforeach (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
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET Desktop feedback
.NET Desktop feedback es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.