using System; using System.Threading; namespace ASCOM.Meade.net { public class ThreadSafeEnum where T: struct, Enum { private long _value; public ThreadSafeEnum(T value) => _value = EnumToLong(value); public void Set(T value) => Interlocked.Exchange(ref _value, EnumToLong(value)); private static long EnumToLong(T value) => Convert.ToInt64(value); public static implicit operator ThreadSafeEnum(T value) => new ThreadSafeEnum(value); public static implicit operator T(ThreadSafeEnum @this) => (T) Enum.ToObject(typeof(T), Interlocked.Read(ref @this._value)); } }