Fin dalla prima versione di Windows 10 è disponibile una API, all'interno del namespace Windows.System, che permette di lavorare con gli utenti: in questo modo è più semplice realizzare applicazioni i cui dati da mostrare devono essere diversi in base all'utente loggato.
Gli utenti si possono recuperare direttamente dal sistema operativo, è sufficiente aggiungere una capability chiamata "User Account Information" e un paio di righe di codice:
IReadOnlyList<User> users = await User.FindAllAsync(UserType.LocalUser, UserAuthenticationStatus.LocallyAuthenticated); var currentUser = users.FirstOrDefault(); var firstName = (string)await currentUser.GetPropertyAsync(KnownUserProperties.FirstName); var lastName = (string)await currentUser.GetPropertyAsync(KnownUserProperties.LastName);
E' anche possibile recuperare l'eventuale immagine associata all'account, per poi mostrarla in un controllo Image nell'interfaccia grafica:
// recupero l'immagine specificando una dimensione var picture = await currentUser.GetPictureAsync(UserPictureSize.Size424x424); // creo una bitmapimage e gli assegno lo stream var bi = new BitmapImage(); await bi.SetSourceAsync(await picture.OpenReadAsync()); // assegno la bitmapimage all'immagine sulla UI UserImage.Source = bi;
La cosa interessante è che, nel codice appena mostrato, gli utenti vengono recuperati da una lista dei Microsoft Account registrati e si considera il primo come l'utente che ha avviato l'applicazione: potrebbe non essere sempre vero, pertanto è consigliato leggere l'utente direttamente allo startup, nel metodo OnLaunched:
protected override async void OnLaunched(LaunchActivatedEventArgs e) { var currentUser = e.User; ... }
Nel caso l'applicazione venga però sospesa, non è possibile risalire all'utente poiché passa da un metodo differente che non ha la proprietà User, ma è sufficiente salvare nello storage locale (o dovunque si preferisca) l'identificativo dell'utente, chiamato NonRoamableId, così che possa essere sempre recuperato a runtime tramite:
var localSettings = ApplicationData.Current.LocalSettings; var oldUserId = localSettings.Values["userId"]; var currentUser = User.GetFromId(oldUserId);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Usare il colore CSS per migliorare lo stile della pagina
Simulare Azure Cosmos DB in locale con Docker
Anonimizzare i dati sensibili nei log di Azure Front Door
Ricevere notifiche sui test con Azure Load Testing
Loggare le query più lente con Entity Framework
Creare una custom property in GitHub
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Effettuare il refresh dei dati di una QuickGrid di Blazor
Migliorare l'organizzazione delle risorse con Azure Policy