public UCRecord(Recording recording)
        {
            InitializeComponent();

            _recording = recording;

            updateTitle();

            _ts = new EZ_B.EZTaskScheduler(recording.Title, true);
            _ts.OnEventToRun     += _ts_OnEventToRun;
            _ts.OnQueueCompleted += _ts_OnQueueCompleted;

            _sw = new Stopwatch();
        }
        private void _ts_OnEventToRun(EZ_B.EZTaskScheduler sender, int taskId, object o)
        {
            try {
                if (sender.IsCancelRequested(taskId))
                {
                    return;
                }

                ARC.Scripting.VariableManager.SetVariable(FormMain._VariableIsRunning, true);

                _state = StateEnum.Playing;

                this.Invoke(new Action(() => {
                    btnDelete.Enabled = false;
                    btnRecord.Enabled = false;
                    btnPlay.BackColor = Color.Red;
                    btnPlay.ForeColor = Color.White;
                    btnPlay.Text      = "Stop";
                }));

                OnLog("{0}: Started", _recording.Title);

                _sw.Restart();

                foreach (var recording in _recording.ServoPositions)
                {
                    if (sender.IsCancelRequested(taskId))
                    {
                        return;
                    }

                    while (_sw.ElapsedTicks < recording.Ticks)
                    {
                        if (sender.IsCancelRequested(taskId))
                        {
                            return;
                        }

                        System.Threading.Thread.Sleep(1);
                    }

                    EZBManager.EZBs[0].Servo.SetServoPosition(recording.GetAsEZBServoItems());
                }
            } catch (Exception ex) {
                OnLog("{0}: {1}", _recording.Title, ex.Message);
            } finally {
                ARC.Scripting.VariableManager.SetVariable(FormMain._VariableIsRunning, false);

                OnLog("{0}: Completed", _recording.Title);

                this.Invoke(new Action(() => {
                    btnDelete.Enabled = true;
                    btnRecord.Enabled = true;
                    btnPlay.BackColor = Color.White;
                    btnPlay.ForeColor = Color.Black;
                    btnPlay.Text      = "Play";
                }));

                _state = StateEnum.Stopped;
            }
        }
 private void _ts_OnQueueCompleted(EZ_B.EZTaskScheduler sender)
 {
     ARC.Scripting.VariableManager.SetVariable(FormMain._VariableIsRunning, false);
 }