private void Treat(Patient p) { Category category = p.Injury.Category; TimeSpan[] interval = Injury.GetTimeInterval(category); //index 0 = min index 1 = max int seconds = rnd.Next(interval[0].Seconds, interval[1].Seconds + 1); p.Timer = new TimeSpan(0, 0, seconds); p.TreatmentStart = DateTime.Now; lock (roomPatientsLock) { RoomPatients.Add(p); p.Room.AddPatient(p); p.Managed = true; } }
public void DischargePatients() { while (Running) { List <Patient> patientsToRemove = new List <Patient>(); lock (roomPatientsLock) { foreach (Patient p in RoomPatients) { TimeSpan timeSpent = DateTime.Now - p.TreatmentStart; if (timeSpent > p.Timer) { patientsToRemove.Add(p); p.Discharged = true; p.LeaveTime = DateTime.Now; //lock (patientsToExitLock) //{ // PatientsToExit.Add(p); //} } } foreach (Patient p in patientsToRemove) { p.Bed.Busy = false; RoomPatients.Remove(p); p.Room.CurrentPatients.Remove(p); lock (allPatientsLock) { AllPatients.Remove(p); } } } } }