public StatusBlinker() { Task.Factory.StartNew(() => { while (true) { Task.Delay(1000).Wait(); var activeFlags = new NetworkStatusEnum[0]; lock (lockFlags) { activeFlags = Enum.GetValues(typeof(NetworkStatusEnum)).Cast <NetworkStatusEnum>() .Where(i => flagsStatus.HasFlag(i)) .ToArray(); } int idx = 0; foreach (var f in activeFlags) { idx++; EmitStatus?.Invoke(this, f); if (idx < activeFlags.Length) { Task.Delay(1000).Wait(); } } } }); }
/// <summary> /// Default constructor /// </summary> public StatusBlinker() { Task.Factory.StartNew(() => { while (true) { // Wait between each check of the loop Task.Delay(1000).Wait(); NetworkStatusEnum[] flags; // Lock for flag access lock (LockFlags) { // Enumerate the flags flags = Enum.GetValues(typeof(NetworkStatusEnum)).Cast <NetworkStatusEnum>() .Where(i => FlagsStatus.HasFlag(i)) .ToArray(); } // Loop through the active flags for (var i = 0; i < flags.Length; i++) { // Emit the status flag EmitStatus?.Invoke(flags[i]); // Wait between each emission except the last if (i != flags.Length - 1) { Task.Delay(1000).Wait(); } } } }); }