SandboxedThreadState
Holds thread state which is captured and restored in order to sandbox user code.
using System.Globalization;
using System.Security;
using System.Security.Principal;
using System.Threading;
namespace NUnit.Framework.Internal
{
internal sealed class SandboxedThreadState
{
private readonly SynchronizationContext _synchronizationContext;
public CultureInfo Culture { get; }
public CultureInfo UICulture { get; }
public IPrincipal Principal { get; }
private SandboxedThreadState(CultureInfo culture, CultureInfo uiCulture, IPrincipal principal, SynchronizationContext synchronizationContext)
{
Culture = culture;
UICulture = uiCulture;
Principal = principal;
_synchronizationContext = synchronizationContext;
}
public static SandboxedThreadState Capture()
{
return new SandboxedThreadState(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture, Thread.CurrentPrincipal, SynchronizationContext.Current);
}
[SecurityCritical]
public void Restore()
{
Thread.CurrentThread.CurrentCulture = Culture;
Thread.CurrentThread.CurrentUICulture = UICulture;
Thread.CurrentPrincipal = Principal;
SynchronizationContext.SetSynchronizationContext(_synchronizationContext);
}
public SandboxedThreadState WithCulture(CultureInfo culture)
{
return new SandboxedThreadState(culture, UICulture, Principal, _synchronizationContext);
}
public SandboxedThreadState WithUICulture(CultureInfo uiCulture)
{
return new SandboxedThreadState(Culture, uiCulture, Principal, _synchronizationContext);
}
public SandboxedThreadState WithPrincipal(IPrincipal principal)
{
return new SandboxedThreadState(Culture, UICulture, principal, _synchronizationContext);
}
}
}