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
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Eseguire i worklow di GitHub su runner potenziati
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
C# 12: Cosa c'è di nuovo e interessante
Gestire domini wildcard in Azure Container Apps
Ordinare randomicamente una lista in C#
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Utilizzare Copilot con Azure Cosmos DB
Migrare una service connection a workload identity federation in Azure DevOps
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Path addizionali per gli asset in ASP.NET Core MVC
Migliorare l'organizzazione delle risorse con Azure Policy
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online