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)); }