private void BuildHandle()
        {
            try
            {
                // Checks
                if (Floors.Count < 2)
                {
                    throw new Exception("The simulation model must have at least 2 floors");
                }
                if (Elevators.Count < 1)
                {
                    throw new Exception("The simulation model must have at least 1 elevator");
                }

                ElevatorSimModel simModel = m_model.BuildModel(Floors.ToList(), Elevators.ToList());
                simModel.Log += AddEventLog;

                m_model.LinkStatistics(Floors.Count, Elevators.Count);

                IsBuilded = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK);
            }
        }
        /// <summary>
        /// Find the nearest elevator from the requested floor lobby when a up/down button is pressed by a person
        /// </summary>
        /// <param name="floor">This is the floor number i.e. form which floor lobby the user is pressed the button. </param>
        /// <param name="elevators">All availabe elevators to the Elevator system.</param>
        /// <returns>Returns the nearest elevator.</returns>
        public static IDictionary <Elevator, int> GetElevatorTimeMap(int requestedFloorNo)
        {
            var elevatorTimeMap = new Dictionary <Elevator, int>();

            System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Run(() => Elevators.ToList().ForEach(elevator =>
            {
                int t = Utility.FindTimeTaken(elevator, requestedFloorNo);
                elevatorTimeMap.Add(elevator, t);
            }));
            task.Wait();
            return(elevatorTimeMap);
        }