private void fxThread(LedModes mode, byte[] options) { switch (mode) { case LedModes.SOLID: for (byte i = 0; i < numLeds; i++) { ledArray[i * 3] = 255; ledArray[i * 3 + 1] = 180; ledArray[i * 3 + 2] = 70; } s.Send(ledArray); break; case LedModes.RUNNING_RAINBOW: for (; ;) { byte k; for (byte j = 0; j < 255; j++) { // fill array with color wheel k = j; for (byte i = 0; i < numLeds; i++) { k++; Array.Copy(Wheel(k), 0, ledArray, i * 3, 3); } s.Send(ledArray); Thread.Sleep(20); } } case LedModes.RUNNING: for (;;) { for (byte i = 0; i < numLeds; i++) { Array.Clear(ledArray, 0, ledArray.Length); Array.Copy(new byte[] { 255, 0, 0 }, 0, ledArray, i * 3, 3); s.Send(ledArray); Thread.Sleep(20); } } default: throw new IndexOutOfRangeException("No such mode declared in LedEffects class");; } }
public void startEffect(LedModes mode, byte[] options) { this.effectThread = new Thread( () => fxThread(mode, options)); effectThread.Start(); }