public void MainMenu(IParking parking) { _parking = parking; bool exitMenu = false; var startTimeSpan = TimeSpan.Zero; var periodTimeSpan = TimeSpan.FromSeconds(parking.Settings.Timeout); Timer parkingPaymentTimer = null; Timer logTransactionTimer = null; try { parkingPaymentTimer = new Timer((e) => { parking.GetPaymentFromCar(); }, null, periodTimeSpan, periodTimeSpan); logTransactionTimer = new Timer((e) => { parking.LogTransactionEveryMinute(); }, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1)); var menu = BuildMainMenu(); while (!exitMenu) { DisplayMainMenu(menu); var menuChoice = GetMenuSelection(menu); menuChoice.ItemHandler?.Invoke(); exitMenu = menuChoice.IsExitOption; } } finally { if (parkingPaymentTimer != null) { parkingPaymentTimer.Dispose(); } if (logTransactionTimer != null) { logTransactionTimer.Dispose(); } } }