public static void Run() { IExecutive exec = ExecFactory.Instance.CreateExecutive(); _tank = new Tank(exec, 1000.0, 100.0); DateTime when = DateTime.Parse("Fri, 15 Jul 2016 00:00:00"); exec.SetStartTime(when); // Must do this, or the initial level is computed at time zero, rather than Fri, 15 Jul 2016 00:00:00. exec.RequestEvent(delegate { _tank.OpenFillValve(); }, when, 1.0); exec.RequestEvent(delegate { _tank.CloseFillValve(); }, when + TimeSpan.FromMinutes(15.0)); exec.RequestEvent(delegate { _tank.OpenFillValve(40); }, when + TimeSpan.FromMinutes(30.0)); for (int i = 0; i < 8; i++) { exec.RequestEvent(ReportTankLevel, when, 0.0); when += TimeSpan.FromMinutes(6.0); } exec.Start(); }