protected virtual DisplayTaskBag GetTaskBag(NotificationDisplayTask task)
        {
            PositionSize         positionSize         = this.GetDefaultNotificationPositionSize();
            NotificationWindowVM notificationWindowVM = this.GetNotificationWindowVM(task, positionSize);

            return(new DisplayTaskBag(task, notificationWindowVM, DateTime.UtcNow, positionSize));
        }
 public DisplayTaskBag(
     [NotNull] NotificationDisplayTask task,
     [NotNull] NotificationWindowVM windowVM,
     DateTime enqueueTime,
     PositionSize positionSize)
 {
     Assert.ArgumentNotNull(task, "task");
     Assert.ArgumentNotNull(windowVM, "windowVM");
     this.Task         = task;
     this.WindowVM     = windowVM;
     this.EnqueueTime  = enqueueTime;
     this.PositionSize = positionSize;
 }
        public virtual bool EnqueueToDisplay(NotificationDisplayTask task)
        {
            var taskBag = this.GetTaskBag(task);

            task.TaskDiscardHandler = this.DiscardTask;
            lock (this.Lock)
            {
                this.AddBagToQueue(taskBag);
                Monitor.Pulse(this.Lock);
                this.ProcessPendingQueue();
            }
            return(true);
        }
        protected virtual bool DiscardTask(NotificationDisplayTask task, bool onlyIfNonDisplayed)
        {
            DisplayTaskBag bagToRemove = null;

            try
            {
                lock (this.Lock)
                {
                    bagToRemove = this.QueuedTasks.FirstOrDefault(displayTaskBag => displayTaskBag.Task == task);
                    if (bagToRemove != null)
                    {
                        this.QueuedTasks.Remove(bagToRemove);
                        return(true);
                    }
                    //Don't try to remove from main collection if flag is true
                    if (onlyIfNonDisplayed)
                    {
                        return(false);
                    }
                    bagToRemove = this.DisplayedWaitForResultTasks.FirstOrDefault(displayTaskBag => displayTaskBag.Task == task);
                    if (bagToRemove == null)
                    {
                        return(false);
                    }
                    this.DisplayedWaitForResultTasks.Remove(bagToRemove);
                    return(true);
                }
            }
            finally
            {
                if (bagToRemove != null)
                {
                    bagToRemove.WindowVM.IsAlive = false;
                    bagToRemove.Task.State       = NotificationState.Aborted;
                }
            }
        }
 protected virtual DisplayTaskBag GetTaskBag(NotificationDisplayTask task)
 {
     PositionSize positionSize = this.GetDefaultNotificationPositionSize();
       NotificationWindowVM notificationWindowVM = this.GetNotificationWindowVM(task, positionSize);
       return new DisplayTaskBag(task, notificationWindowVM, DateTime.UtcNow, positionSize);
 }
 protected virtual NotificationWindowVM GetNotificationWindowVM(NotificationDisplayTask task, PositionSize actualPositionAndSize)
 {
     return new NotificationWindowVM(actualPositionAndSize, task.RelatedSpecializedNotification, task.Originator);
 }
 protected virtual bool DiscardTask(NotificationDisplayTask task, bool onlyIfNonDisplayed)
 {
     DisplayTaskBag bagToRemove = null;
       try
       {
     lock (this.Lock)
     {
       bagToRemove = this.QueuedTasks.FirstOrDefault(displayTaskBag => displayTaskBag.Task == task);
       if (bagToRemove != null)
       {
     this.QueuedTasks.Remove(bagToRemove);
     return true;
       }
       //Don't try to remove from main collection if flag is true
       if (onlyIfNonDisplayed)
       {
     return false;
       }
       bagToRemove = this.DisplayedWaitForResultTasks.FirstOrDefault(displayTaskBag => displayTaskBag.Task == task);
       if (bagToRemove == null)
       {
     return false;
       }
       this.DisplayedWaitForResultTasks.Remove(bagToRemove);
       return true;
     }
       }
       finally
       {
     if (bagToRemove != null)
     {
       bagToRemove.WindowVM.IsAlive = false;
       bagToRemove.Task.State = NotificationState.Aborted;
     }
       }
 }
 public virtual bool EnqueueToDisplay(NotificationDisplayTask task)
 {
     var taskBag = this.GetTaskBag(task);
       task.TaskDiscardHandler = this.DiscardTask;
       lock (this.Lock)
       {
     this.AddBagToQueue(taskBag);
     Monitor.Pulse(this.Lock);
     this.ProcessPendingQueue();
       }
       return true;
 }
 protected virtual NotificationWindowVM GetNotificationWindowVM(NotificationDisplayTask task, PositionSize actualPositionAndSize)
 {
     return(new NotificationWindowVM(actualPositionAndSize, task.RelatedSpecializedNotification, task.Originator));
 }