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
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Introduzione alle Container Queries
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Creare una custom property in GitHub
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Utilizzare Azure Cosmos DB con i vettori
Ricevere notifiche sui test con Azure Load Testing
Migliorare l'organizzazione delle risorse con Azure Policy
Introduzione ai web component HTML
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
I più letti di oggi
- Recuperare l'ultima versione di una release di GitHub
- Rendere i propri workflow e le GitHub Action utilizzate più sicure
- Disabilitare le run concorrenti di una pipeline di Azure DevOps
- Gestione dei nomi con le regole @layer in CSS
- Introduzione alle Container Queries in CSS
- Fornire parametri ad un Web component HTML
- Visual Studio Live: what's next - Online
- .NET Conference Italia 2021 - Online
- ASP.NET MVC Release Candidate 2