Esempio n. 1
0
        static public void ExecutionProcess(Action action, bool debugFlag = false)
        {
            try
            {
                eexecutionTokenSource = new CancellationTokenSource();
                eexecutionToken       = eexecutionTokenSource.Token;

                if (!serialPort.IsOpen)
                {
                    throw new InvalidOperationException();
                }
                if (!startExecution_status)
                {
                    startExecution_status = true;
                    action();

                    execution = new Task(() =>
                    {
                        Point[] tempPoints = new Point[pointList.Count];
                        pointList.CopyTo(tempPoints);
                        do
                        {
                            Passing.pastPoint = tempPoints[0];
                            //проходимся по всем точкам и выролняем их отправку
                            foreach (Point point in tempPoints)
                            {
                                if (eexecutionToken.IsCancellationRequested)
                                {
                                    return;                                          //принудительное закрытие задачи
                                }
                                Passing.sinFunc(Passing.pastPoint,
                                                point,
                                                serialPort.Write);
                                Passing.pastPoint = point;
                                if (debugFlag)
                                {
                                    CommonConsoleWrite(point.ToString());
                                }
                            }
                        } while (cycleStatus && startExecution_status);

                        startExecution_status = false;

                        action();
                    });
                    execution.Start();
                }
                else
                {
                    startExecution_status = false;  //в зависимости от него переключить внешний вид кнопки запуска программы точек
                    action();
                    eexecutionTokenSource.Cancel();
                }
            }
            catch (Exception ce)
            {
                CommonConsoleWrite(ce.Message, Colors.Red);
            }
        }