public void Step(int MaxThreads = 4) { ParallelOptions pOptions = new ParallelOptions { MaxDegreeOfParallelism = MaxThreads }; Parallel.For(0, CurrentGeneration.Height, pOptions, y => { for (int x = 0; x < CurrentGeneration.Width; x++) { int AliveNeighbors = CurrentGeneration.GetAliveNeighbours(x, y); bool isAlive = CurrentGeneration.IsAlive(x, y); if (isAlive && (AliveNeighbors == 2 || AliveNeighbors == 3)) { NextGeneration.SetPixel(x, y, true); } else if (!isAlive && AliveNeighbors == 3) { NextGeneration.SetPixel(x, y, true); } else { NextGeneration.SetPixel(x, y, false); } } }); }