public bool StartProcedure(string procname) { bool result = false; if (procedures.Contains(procname) && System.IO.File.Exists(CheckListFilename)) { foreach (XElement procedure in XElement.Load(CheckListFilename).Elements("procedure")) { if (procedure.Attribute("name").Value.ToLower() == procname) { ShowProcedure(procname); activeProcedure.Clear(); if (checklistForm != null) { if (procedure.Attribute("say") != null) { checklistForm.Say(procedure.Attribute("say").Value); } else { checklistForm.Say(procname + " procedure"); } } foreach (XElement items in procedure.Elements("item")) { string name = ""; int time = 1; // default to 1 second per item string fsuipc = ""; string xplm = ""; string say = ""; if (items.Attribute("name") != null) { name = items.Attribute("name").Value; } if (items.Attribute("time") != null) { time = Convert.ToInt32(items.Attribute("time").Value); } if (items.Attribute("fsuipc") != null) { fsuipc = items.Attribute("fsuipc").Value; } if (items.Attribute("xplm") != null) { xplm = items.Attribute("xplm").Value; } if (items.Attribute("say") != null) { say = items.Attribute("say").Value; } ProcedureItem item = new ProcedureItem(); item.name = name; item.time = time; item.fsuipc = fsuipc; item.xplm = xplm; item.say = say; activeProcedure.Add(item); } nextProcedureItem = activeProcedure.GetEnumerator(); if (nextProcedureItem.MoveNext()) { if (!singleStepMode) { tmrNextItem.Interval = Math.Max(1, nextProcedureItem.Current.time) * 1000; tmrNextItem.Start(); } else { tmrNextItem.Stop(); } result = true; } else { EndProcedure(); } break; } } } return(result); }