protected void UnHookTrigger(TriggerManager tm)
 {
     tm.Activate -= new EventHandler(tm_Activate);
     tm.Deactivate -= new EventHandler(tm_Deactivate);
     tm.Dispose();
 }
 private void RemoveTrigger(TriggerManager tm)
 {
     lock (Triggers)
     {
         if (Triggers.Contains(tm))
         {
             Triggers.Remove(tm);
             UnHookTrigger(tm);
         }
     }
 }
 protected void HookUpTrigger(TriggerManager tm)
 {
     tm.Activate += new EventHandler(tm_Activate);
     tm.Deactivate += new EventHandler(tm_Deactivate);
 }
        private void AddMastTrigger(Trigger t)
        {
            var oldtm = Triggers.FirstOrDefault(trig => trig.Trigger.Id == t.Id);

            if (oldtm != null)
            {
                if (ActiveTriggers.Contains(oldtm))
                {
                    // trigger with the same ID already exists and is currently active (in which case we don't want to update it or it could re-evaluate).
                    return;
                }
                else
                {
                    // trigger with the same ID already exists, replace it
                    Triggers.Remove(oldtm);
                    UnHookTrigger(oldtm);
                }
            }

            // add the new trigger
            TriggerManager tm = new TriggerManager(t, MastInterface);
            Triggers.Add(tm);
            HookUpTrigger(tm);
        }
        /// <summary>
        /// Used to force the deactivation of a trigger
        /// </summary>
        /// <param name="t">The trigger that is to be deactivated</param>
        protected void OnTriggerDeactivate(TriggerManager tm)
        {
            ActiveTriggers.Remove(tm);

            if (DeactivateTrigger != null)
                DeactivateTrigger(this, new TriggerEventArgs(tm.Trigger));
        }
        protected void OnTriggerActivate(TriggerManager tm)
        {
            ActiveTriggers.Add(tm);

            // Note: this should always be on the main thread if UseDispatcherThread == true
            //a trigger is letting us know it's ready, pass it on.
            if (ActivateTrigger != null)
                ActivateTrigger(this, new TriggerEventArgs(tm.Trigger));
        }
 private void Evaluate(TriggerManager tm)
 {
     try
     {
         //If it succeeds, it will take care of itself and fire event if ready
         tm.Evaluate();
     }
     catch (Exception ex)
     {
         TriggerEvaluationFailed(this, new TriggerFailureEventArgs(tm.Trigger, ex));
     }
 }
 private void EvaluateAsync(TriggerManager tm)
 {
     AsyncHelper.UI(delegate { Evaluate(tm); }, Deployment.Current.Dispatcher, true, ReenteranceMode.Bypass);
 }