コード例 #1
0
        /// <summary>
        /// This is a thread worker. It performs the continuous animation until Stop is called.
        /// </summary>
        private void AnimateContinuosly()
        {
            IsPendingStop = false;

            var startFrameTime = DateTime.UtcNow;

            using (var tickLock = new ManualResetEvent(false))
            {
                while (IsPendingStop == false)
                {
                    startFrameTime = DateTime.UtcNow;
                    FrameNumber    = (FrameNumber == UInt64.MaxValue) ? 1 : FrameNumber + 1;

                    lock (SyncLock)
                    {
                        CurrentAnimation.PaintNextFrame();
                        LedStrip.Render();
                    }

                    var elapsedToFrame = MillisecondsPerFrame - Convert.ToInt32(DateTime.UtcNow.Subtract(startFrameTime).TotalMilliseconds);

                    if (elapsedToFrame <= 0)
                    {
                        $"Frames are lagging. Increase the frequency or simplify the rendering logic.".Warn(); // typeof(LedStripWorker));
                        continue;
                    }
                    else
                    {
                        tickLock.WaitOne(elapsedToFrame);
                    }
                }
            }

            IsPendingStop = false;
        }