public Ui(List <List <UiModuleSettings> > layout) { this.layout = layout; this.currentWindowWidth = Console.WindowWidth; this.currentWindowHeight = Console.WindowHeight; this.canvas = GenerateCanvas(layout); var dimensionsEventParameters = new Events.EventParameters( condition: () => { return(Console.WindowWidth != this.currentWindowWidth || Console.WindowHeight != this.currentWindowHeight); }, subscribingMethod: this.UpdateDimensions); Events.EventManager.RegisterEvent(dimensionsEventParameters); }
/// <summary> /// Register an event to be managed. /// </summary> /// <param name="eventParameters">A <see cref="EventParameters"/> object defining event information.</param> /// <returns>A <see cref="bool"/> value indicating if the event was registered.</returns> public static bool RegisterEvent(EventParameters eventParameters) { if (eventDictionary.Count == MaximumNumberOfEvents) { throw new OverflowException("Can not register another event. The maximum number of events possible to register was reached."); } if (!eventDictionary.TryAdd(eventParameters.GetHashCode(), eventParameters)) { return(false); } if (eventTask.Status == TaskStatus.Created) { eventTask.Start(); } else if (eventTask.IsCompleted) { eventTask = Task.Run(EventLoop); } return(true); }
/// <summary> /// Unregisters an event from the event manager. The <see cref="EventParameters"/> instance must be the same instance as the event was registered with. /// </summary> /// <param name="eventParameters">A <see cref="EventParameters"/> object defining event information.</param> /// <returns>A <see cref="bool"/> value indicating if the event was unregistered.</returns> public static bool UnregisterEvent(EventParameters eventParameters) { return(eventDictionary.TryRemove(eventParameters.GetHashCode(), out eventParameters)); }