SandboxedThreadState
Holds thread state which is captured and restored in order to sandbox user code.
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Security.Principal;
using System.Threading;
namespace NUnit.Framework.Internal
{
[NullableContext(1)]
[Nullable(0)]
internal sealed class SandboxedThreadState
{
[Nullable(2)]
private readonly SynchronizationContext _synchronizationContext;
public CultureInfo Culture { get; }
public CultureInfo UICulture { get; }
[Nullable(2)]
[field: Nullable(2)]
public IPrincipal Principal {
[NullableContext(2)]
get;
}
private SandboxedThreadState(CultureInfo culture, CultureInfo uiCulture, [Nullable(2)] IPrincipal principal, [Nullable(2)] SynchronizationContext synchronizationContext)
{
Culture = culture;
UICulture = uiCulture;
Principal = principal;
_synchronizationContext = synchronizationContext;
}
public static SandboxedThreadState Capture()
{
return new SandboxedThreadState(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture, ThreadUtility.GetCurrentThreadPrincipal(), SynchronizationContext.Current);
}
public void Restore()
{
Thread.CurrentThread.CurrentCulture = Culture;
Thread.CurrentThread.CurrentUICulture = UICulture;
ThreadUtility.SetCurrentThreadPrincipal(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([Nullable(2)] IPrincipal principal)
{
return new SandboxedThreadState(Culture, UICulture, principal, _synchronizationContext);
}
}
}