public static void Test() { EmbedScheduler scheduler = new EmbedScheduler(); scheduler.Register(new Resource() { Name = "STAR", Count = 1, Color = Color.Blue }); scheduler.Register(new Resource() { Name = "iSWAP", Count = 1, Color = Color.Red }); scheduler.Register(new Resource() { Name = "Incubator", Count = 10, Color = Color.Green }); scheduler.Register(new Resource() { Name = "Shaker", Count = 1, Color = Color.Yellow }); scheduler.Register(new Resource() { Name = "Reader", Count = 1, Color = Color.Orange }); IRuntimeResource reader = scheduler.GetResource("Reader"); IRuntimeResource incubator = scheduler.GetResource("Incubator"); //reader.DisableUnit(1); incubator.DisableUnit(3); scheduler.Activate(new Task1() { Name = "Assay1_1" }); scheduler.Activate(new Task2() { Name = "Assay2_2" }, new Dictionary <int, TaskRelation>() { { 1, TaskRelation.AfterTaskEnd } }); scheduler.Activate(new Task3() { Name = "Assay3_3" }); scheduler.Activate(new Task2() { Name = "Assay2_4" }, new Dictionary <int, TaskRelation>() { { 3, TaskRelation.AfterTaskEnd } }); scheduler.Activate(new Task4() { Name = "Assay4_5" }, new Dictionary <int, TaskRelation>() { { 1, TaskRelation.BeforeRunEnd } }); scheduler.Activate(new Task1() { Name = "Assay1_6" }); scheduler.Activate(new Task5() { Name = "Assay5_7" }); scheduler.Activate(new Task1() { Name = "Assay1_8" }, new Dictionary <int, TaskRelation>() { { 1, TaskRelation.AfterTaskEnd } }); scheduler.Activate(new Task3() { Name = "Assay3_9" }); scheduler.Activate(new Task3() { Name = "Assay3_10" }, new Dictionary <int, TaskRelation>() { { 9, TaskRelation.AfterTaskStart } }); scheduler.Activate(new Task4() { Name = "Assay4_11" }, new Dictionary <int, TaskRelation>() { { 9, TaskRelation.AfterTaskStart } }); scheduler.Activate(new Task1() { Name = "Assay1_12" }); scheduler.Activate(new Task2() { Name = "Assay2_13" }); scheduler.Activate(new Task3() { Name = "Assay3_14" }); scheduler.Activate(new Task3() { Name = "Assay3_15" }); scheduler.Activate(new Task4() { Name = "Assay4_16" }); scheduler.Activate(new Task5() { Name = "Assay5_17" }); scheduler.Activate(new Task2() { Name = "Assay2_18" }); scheduler.Activate(new Task1() { Name = "Assay1_19" }); scheduler.Activate(new Task2() { Name = "Assay2_20" }); scheduler.Activate(new Task1() { Name = "Assay1_21" }); scheduler.Activate(new Task5() { Name = "Assay5_22" }); scheduler.Activate(new Task1() { Name = "Assay1_23" }); scheduler.Activate(new Task2() { Name = "Assay2_24" }); scheduler.Activate(new Task3() { Name = "Assay3_25" }); scheduler.Activate(new Task1() { Name = "Assay1_26" }); scheduler.Activate(new Task2() { Name = "Assay2_27" }); scheduler.Activate(new Task1() { Name = "Assay1_28" }); scheduler.Activate(new Task5() { Name = "Assay5_29" }); scheduler.Activate(new Task3() { Name = "Assay3_30" });; scheduler.Activate(new Task4() { Name = "Assay4_31" }); scheduler.Activate(new Task1() { Name = "Assay1_32" }); scheduler.Activate(new Task3() { Name = "Assay3_33" }); scheduler.Activate(new Task1() { Name = "Assay4_34" }); scheduler.Activate(new Task2() { Name = "Assay2_35" }); scheduler.Activate(new Task3() { Name = "Assay3_36" }); scheduler.Activate(new Task5() { Name = "Assay5_37" }); scheduler.Activate(new Task3() { Name = "Assay3_38" }); scheduler.Activate(new Task1() { Name = "Assay1_39" }); /* */ DateTime d = DateTime.Now; scheduler.Schedule(); Console.WriteLine("time used" + new TimeSpan(DateTime.Now.Ticks - d.Ticks).TotalMilliseconds); scheduler.Run(); /* * ScheduleTask t = scheduler.GetTask(3) as ScheduleTask; * Console.WriteLine("detail for task" + t.ID); * for (int i = 0; i < t.Activities.Length; i++) * { * ScheduleActivity ac = t.Activities[i]; * Console.WriteLine("activity {0} start={1} duration={2}", ac.Name, ac.PlannedStart, ac.PlannedDuration); * for (int j = 0; j < ac.UnitReservations.Count; j++) * { * UnitReservation ur = ac.UnitReservations[j].Value; * LinkedListNode<UnitReservation> node = ac.UnitReservations[j]; * Console.WriteLine(" resource {0} unit {1} nextAct={4}", ur.Resource.Name, ur.Uint, * ur.PlannedStart, ur.PlannedDuration, node.Previous != null ? node.Previous.Value.Activity.Name + " of task " + node.Previous.Value.Activity.Task.ID : "non"); * } * } */ //scheduler.Run(); /* * ScheduleTask t = scheduler.GetTask(1) as ScheduleTask; * t.Activities[0].Duration -= 10; * DateTime d2 = DateTime.Now; * scheduler.Schedule(); * Console.WriteLine("time used" + new TimeSpan(DateTime.Now.Ticks - d.Ticks).TotalMilliseconds); * Bitmap map2 = scheduler.DrawGannt(); * //TestForm form2 = new TestForm(); * //form2.pictureBox1.Image = map2; * //form2.Show(); */ }
void PaintResourcePanel(object sender, PaintEventArgs e) { if (tasks == null || resources == null) { return; } scheduler.Lock(); try { Dictionary <int, IRuntimeTask> id2task = new Dictionary <int, IRuntimeTask>(); foreach (IRuntimeTask t in tasks) { id2task[t.ID] = t; } Graphics g = e.Graphics; int count = 0; Dictionary <string, int> resouceColumns = new Dictionary <string, int>(); Dictionary <string, IRuntimeResource> name2res = new Dictionary <string, IRuntimeResource>(); //draw resource lable for (int i = 0; i < resources.Length; i++) { name2res[resources[i].Name] = resources[i]; if (resources[i].Count == 1) { count++; resouceColumns[resources[i].Name + "_0"] = count - 1; } else { for (int j = 0; j < resources[i].Count; j++) { count++; string name = resources[i].Name + "-" + (j + 1); if (!resources[i].IsUnitEnabled(j)) { name = name + "(disabled)"; } resouceColumns[resources[i].Name + "_" + j] = count - 1; } } } for (int i = 0; i < tasks.Length; i++) { if (!IsTaskOK(tasks[i])) { continue; } for (int j = 0; j < tasks[i].Activities.Length; j++) { IRuntimeActivity activity = tasks[i].Activities[j]; foreach (string key in activity.Reservations.Keys) { IRuntimeResource r = name2res[key]; int[] units = activity.Reservations[key]; for (int m = 0; m < units.Length; m++) { string nn = key + "_" + units[m]; if (units[m] >= 0 && resouceColumns.ContainsKey(nn)) { int rc = resouceColumns[nn]; //draw activity resource reservation g.FillRectangle(new SolidBrush(r.Color), new RectangleF(activity.PlannedStart * ScaleFactor, rc * RowHeight, (activity.PlannedDuration * ScaleFactor), RowHeight - 1)); if ((activity.PlannedDuration * ScaleFactor) > 1) { g.DrawString(activity.Name, SystemFonts.DefaultFont, Brushes.Black, new RectangleF(activity.PlannedStart * ScaleFactor, rc * RowHeight, (activity.PlannedDuration * ScaleFactor), RowHeight - 1)); } } } } } } //draw current Line g.DrawLine(Pens.Red, scheduler.Current * scaleFactor, 0, scheduler.Current * scaleFactor, ResourcePanel.Height); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } finally{ scheduler.Unlock(); } }