public void Dispose()
 {
     if (_changer != null)
     {
         _changer.VolumeDown -= _changer_VolumeChanged;
         _changer.VolumeUp   -= _changer_VolumeChanged;
     }
     _tokenSource?.Cancel();
     _tokenSource = null;
 }
Пример #2
0
        private void ReInitTimer()
        {
            _timerCancellationToken?.Cancel();
            _timerCancellationToken = SystemUtils.StartTimer(
                (token) => _manager.RefreshIteration(),
                () =>
            {
                if (_manager == null)
                {
                    return(Timeout.Infinite);
                }

                var interval = _manager.ListenerSettings.ScreenOnInterval;
                try
                {
                    if (IsPhoneSleeping)
                    {
                        interval = _manager.ListenerSettings.ScreenOffInterval;
                    }
                    else if (IsPhoneInPowerSave)
                    {
                        interval = _manager.ListenerSettings.PowerSavingModeInterval;
                    }
                    else if (_manager.ConnectionState != MainDomain.ManagerConnectionState.Connected)
                    {
                        interval = _manager.ListenerSettings.OnErrorInterval;
                    }
                }
                catch
                {
                    // Do nothing
                }
                return(interval);
            },
                false);
        }
        public LazuriteAnimatedIcon()
        {
            _stopAnimate.Cancel(); // Crutch

            InitializeComponent();
        }
Пример #4
0
 private void InitializeTimer()
 {
     _timerCancellationTokenSource?.Cancel();
     _timerCancellationTokenSource = SystemUtils.StartTimer((c) => TimerTick(), () => 30000);
 }
Пример #5
0
 /// <summary>
 /// Try cancel all operations
 /// </summary>
 public virtual void TryCancelAll()
 {
     _cancellationToken?.Cancel();
 }
Пример #6
0
 public void Dispose()
 {
     _updateUICancellationToken?.Cancel();
     _updateUICancellationToken = null;
 }
Пример #7
0
        protected override void RunInternal()
        {
            if (GetScenario() == null)
            {
                return;
            }

            //удаляем старую подписку, если имеется
            if (_lastSubscribe != null)
            {
                GetScenario().RemoveOnStateChanged(_lastSubscribe);
            }

            //выполнение по подписке на изменение значения
            var executeBySubscription = true;

            //если сценарий это одиночное действие и нельзя подписаться на изменение целевого действия
            //то не выполняем по подписке, а выполняем просто через цикл
            if (GetScenario() is SingleActionScenario singleActionScen && !singleActionScen.ActionHolder.Action.IsSupportsEvent)
            {
                executeBySubscription = false;
            }

            var contextCancellationToken = new SafeCancellationToken();

            CancellationToken.RegisterCallback(contextCancellationToken.Cancel);
            if (executeBySubscription)
            {
                _lastSubscribe = (sender, args) =>
                {
                    if (CancellationToken.IsCancellationRequested)
                    {
                        //crutch; scenario can be changed before initializing, then we need to remove
                        //current subscribe from previous scenario. CancellationToken.IsCancellationRequested
                        //can be setted in true only when trigger stopped;
                        args.Value.Scenario.RemoveOnStateChanged(_lastSubscribe);
                    }
                    else
                    {
                        if (!args.Value.OnlyIntent)
                        {
                            var action        = TargetAction;
                            var outputChanged = new OutputChangedDelegates();
                            outputChanged.Add((value) => GetScenario().SetCurrentValue(value, ExecuteActionSource));
                            contextCancellationToken.Cancel();
                            contextCancellationToken = new SafeCancellationToken();
                            var executionContext = new ExecutionContext(this, args.Value.Value, args.Value.PreviousValue, outputChanged, contextCancellationToken);
                            TaskUtils.StartLongRunning(
                                () => action.SetValue(executionContext, string.Empty),
                                (exception) => Log.ErrorFormat(exception, "Ошибка выполнения триггера [{0}][{1}]", Name, Id));
                        }
                    }
                };
                GetScenario().SetOnStateChanged(_lastSubscribe);
            }
            else
            {
                var lastVal = string.Empty;
                var timerCancellationToken = SystemUtils.StartTimer(
                    (token) =>
                {
                    try
                    {
                        var curVal = GetScenario().CalculateCurrentValue(ViewActionSource, null);
                        if (!lastVal.Equals(curVal))
                        {
                            var prevVal = GetScenario().GetPreviousValue();
                            lastVal     = curVal;
                            contextCancellationToken.Cancel();
                            contextCancellationToken = new SafeCancellationToken();
                            var executionContext     = new ExecutionContext(this, curVal, prevVal, new OutputChangedDelegates(), contextCancellationToken);
                            try
                            {
                                TargetAction.SetValue(executionContext, string.Empty);
                            }
                            catch (Exception exception)
                            {
                                Log.ErrorFormat(exception, "Ошибка выполнения триггера [{0}][{1}]", Name, Id);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.ErrorFormat(e, "Ошибка выполнения триггера [{0}][{1}]", Name, Id);
                    }
                },
                    () => TriggerChangesListenInterval,
                    true,
                    ticksSuperposition: true /*наложение тиков*/);
                CancellationToken.RegisterCallback(timerCancellationToken.Cancel);
            }
        }
 private void StopListen()
 {
     _timerCancellationToken?.Cancel();
     _isListening = false;
 }