private static void StartTextBoxBlinker(TimedAction timedAction, TRef <int> blinkerCounter) { timedAction.Reset(() => { // The blinker is on falf of the time and events such as input // changes can reset the blinker. var value = Volatile.Read(ref blinkerCounter.Value); value = (value + 1) % (2 * TextBoxBlinkThreshold); Volatile.Write(ref blinkerCounter.Value, value); }, TextBoxBlinkSleepMilliseconds); }
public void Reset(Action action) { // Create a dedicated cancel token for each task. var cancelled = new TRef <bool>(false); Reset(new Thread(() => { while (!Volatile.Read(ref cancelled.Value)) { action(); } }), cancelled); }
public void Reset(Action <float> action, int totalMilliseconds, int sleepMilliseconds) { // Create a dedicated cancel token for each task. var cancelled = new TRef <bool>(false); Reset(new Thread(() => { var substepData = new SleepSubstepData(sleepMilliseconds); int totalCount = totalMilliseconds / sleepMilliseconds; int totalRemainder = totalMilliseconds - totalCount * sleepMilliseconds; if (Volatile.Read(ref cancelled.Value)) { action(-1); return; } action(0); for (int i = 1; i <= totalCount; i++) { if (SleepWithSubstep(substepData, cancelled)) { action(-1); return; } action((float)(i * sleepMilliseconds) / totalMilliseconds); } if (totalRemainder > 0) { if (SleepWithSubstep(substepData, cancelled)) { action(-1); return; } action(1); } }), cancelled); }
private void Reset(Thread thread, TRef <bool> cancelled) { lock (_lock) { // Cancel the current task. if (_cancelled != null) { Volatile.Write(ref _cancelled.Value, true); } _cancelled = cancelled; _thread = thread; _thread.IsBackground = true; _thread.Start(); } }
public void Reset(Action action, int sleepMilliseconds) { // Create a dedicated cancel token for each task. var cancelled = new TRef <bool>(false); Reset(new Thread(() => { var substepData = new SleepSubstepData(sleepMilliseconds); while (!Volatile.Read(ref cancelled.Value)) { action(); if (SleepWithSubstep(substepData, cancelled)) { return; } } }), cancelled); }
private static bool SleepWithSubstep(SleepSubstepData substepData, TRef <bool> cancelled) { for (int i = 0; i < substepData.SleepCount; i++) { if (Volatile.Read(ref cancelled.Value)) { return(true); } Thread.Sleep(substepData.SleepMilliseconds); } if (substepData.SleepRemainderMilliseconds > 0) { if (Volatile.Read(ref cancelled.Value)) { return(true); } Thread.Sleep(substepData.SleepRemainderMilliseconds); } return(Volatile.Read(ref cancelled.Value)); }