<PackageReference Include="NUnit" Version="4.3.1" />

SandboxedThreadState

sealed class 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); } } }