// <summary>
        /// Создает новый экземпляр ReadInputLoop и подписывает метод
        /// </summary>
        public static T Create <T, TU>(string id, Action <TU> action, bool startOnAwake = false)
            where T : LoopGeneric <TU>, new()
            where TU : class
        {
            // Новый экземпляр
            var loopT = new T();

            loopT.SetCancellationTokenSource(new CancellationTokenSource());

            // Подписываем переданный метод
            if (action != null)
            {
                loopT.Subscribe(action);
            }

            // Добавляем в менеджер
            LoopManager.AddLoop(loopT);

            LoopManager.Log($"Loop {loopT.Id}: ожидает старта");

            // Запускаем, если нужно
            if (startOnAwake)
            {
                loopT.Start();
            }

            return(loopT);
        }
Example #2
0
        /// <summary>
        /// Запускает работу цикла в отдельную задачу
        /// </summary>
        public virtual void Start()
        {
            LoopManager.Log($"Loop {Id}: запущен");
            // Запускает новую задачу

            WorkspaceThread = new Thread(new ThreadStart(() => Update()));
            WorkspaceThread.Start();
        }
Example #3
0
        /// <summary>
        /// Проверяет запрос отмены. True если запрос действителен.
        /// </summary>
        protected bool CheckCancelationToken()
        {
            var token = CancellationTokenSource.Token;

            // Если запрошена отмена цикла - завершаем работу
            if (token.IsCancellationRequested == true)
            {
                // Очищаем данные
                Dispose();

                LoopStatus = LoopStatus.Canceled;

                LoopManager.Log($"Loop {Id}: остановлен");
                return(true);
            }

            return(false);
        }
Example #4
0
 /// <summary>
 /// Вывод текущего статуса
 /// </summary>
 public void Report(LoopStatus value)
 {
     LoopManager.Log(value);
 }
Example #5
0
        /// <summary>
        /// Останавливает цикл и связанный с ним Task
        /// </summary>
        public void Cancel()
        {
            CancellationTokenSource.Cancel();

            LoopManager.Log($"Loop {Id}: вызвана полная остановка");
        }