Como persistir e restaurar propriedades de escopo do aplicativo em sessões de aplicativo
Este exemplo mostra como manter as propriedades do escopo do aplicativo quando um aplicativo é desligado e como restaurar as propriedades do escopo do aplicativo na próxima vez que um aplicativo for iniciado.
Exemplo
O aplicativo persiste as propriedades do escopo do aplicativo e as restaura do armazenamento isolado. O armazenamento isolado é uma área de armazenamento protegida que pode ser usada com segurança por aplicativos sem permissão de acesso a arquivos. O arquivo App.xaml define o App_Startup
método como o manipulador do Application.Startup evento e o App_Exit
método como o manipulador Application.Exit do evento, conforme mostrado nas linhas realçadas do seguinte XAML:
Observação
O XAML a seguir foi escrito para CSharp. A versão do Visual Basic omite a declaração 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>
O próximo exemplo mostra o code-behind do aplicativo, que contém os manipuladores de eventos para o XAML. O App_Startup
método restaura as propriedades do escopo do aplicativo e salva as propriedades do escopo do App_Exit
aplicativo.
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