EDIT
The simple question is, how can I get Thread.CurrentPrincipal.Identity.Name
to have the current user logon in WPF?
Set Thread.CurrentPrincipal
to new WindowsPrincipal(WindowsIdentity.GetCurrent())
. You'll then reliably have the current principal for the lifetime of that thread. You'll have to repeat this on any other threads you spin up.
EDIT: I should also mention the SetThreadPrincipal and SetPrincipalPolicy methods on AppDomain. This should be done on application startup, and new threads created will now see this principal by default. If this method isn't called, every new thread will start out with GenericPrincipal again.
Try
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
or:
Environment.UserName
This also worked for me:
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());