private void bt_emercencyStop_Click(object sender, RoutedEventArgs e)
        {
            if (_DedicatedSee != null)
            {
                SkillProException Ex = _DedicatedSee.TryStopSkillExecution();

                if (Ex != null)
                {
                    DisplayException(new Exception(Ex.Message, Ex.InnerException));
                }
            }
        }
        void _DedicatedSee_LastExceptionValueChanged(object sender, SkillProException newValue)
        {
            if (!Dispatcher.CheckAccess()) // CheckAccess returns true if you're on the dispatcher thread
            {
                Dispatcher.BeginInvoke(new See.NewExceptionOccuredDelegate(_DedicatedSee_LastExceptionValueChanged), this, newValue);
                return;
            }

            lbl_Last_Exception.Content = newValue.Message;
            _LastException             = newValue;

            UpdateButtonVisibility();
        }
        private void bt_ext_recover_Click(object sender, RoutedEventArgs e)
        {
            if (_DedicatedSee == null)
            {
                UpdateButtonVisibility();
                updateSeeStateOnWindow(SeeResourceMode.PreOperational);
                return;
            }

            bool RecoOk = _DedicatedSee.EXT_RECOVER();

            if (RecoOk)
            {
                lbl_Last_Exception.Content = "Last exception : ";
                _LastException             = null;
            }
            UpdateButtonVisibility();
        }
        void StateMachine_StateChanged(object sender, StateChangedEventArgs args)
        {
            if (!Dispatcher.CheckAccess()) // CheckAccess returns true if you're on the dispatcher thread
            {
                Dispatcher.BeginInvoke(new SeeStateMachine.StateChangedDelegate(StateMachine_StateChanged), this, args);
                return;
            }

            // check that the current session matches the session that raised the event.
            //if (!Object.ReferenceEquals(this, sender))
            //{
            //    return;
            //}

            lbl_SEE_SATE.Content = "SEE STATE :  " + args.NewState.ToString();

            if (_DedicatedSee != null && _DedicatedSee.ExceptionQueue != null && _DedicatedSee.ExceptionQueue.Count != 0)
            {
                //List<SkillProException> l = _DedicatedSee.ExceptionQueue.ToList();
                //lbl_Last_Exception.Content = "Last exception : " + l[0].Message;
            }
            else
            {
                _LastException             = null;
                lbl_Last_Exception.Content = "Last exception :";
            }

            switch (args.NewState)
            {
            case SeeResourceMode.PreOperational:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Hidden;
                break;

            case SeeResourceMode.ExecutingSkill:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Visible;
                PauseResumeButtonName        = SKILL_PAUSE;
                break;

            case SeeResourceMode.ExecutingSkillPausing:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Hidden;
                break;

            case SeeResourceMode.ExecutingSkillResumable:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Visible;
                PauseResumeButtonName        = SKILL_RESUME;
                break;

            case SeeResourceMode.Idle:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Hidden;
                break;

            case SeeResourceMode.IdleQueuedSkill:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Hidden;
                break;

            case SeeResourceMode.Error:
                bt_PauseResumeExe.Visibility = System.Windows.Visibility.Hidden;
                break;

            default:
                break;
            }

            if (args.NewState == SeeResourceMode.IdleQueuedSkill)
            {
                bt_ClearQueuedSkill.Visibility = System.Windows.Visibility.Visible;
            }
            else
            {
                bt_ClearQueuedSkill.Visibility = System.Windows.Visibility.Hidden;
            }

            if (args.NewState == SeeResourceMode.ExecutingSkill)
            {
                bt_emercencyStop.Visibility = System.Windows.Visibility.Visible;
            }
            else
            {
                bt_emercencyStop.Visibility = System.Windows.Visibility.Hidden;
            }

            updateSeeStateOnWindow(args.NewState);
            UpdateButtonVisibility();
        }