/// <summary> /// 执行准确的函数 /// </summary> /// <param name="box"></param> protected void Dofunction(ItemBox box, WriteStreamCallBack wrs, IScriptLayout ml) { if (isStop) { throw new Exception("主动停止了脚本!"); } ml.SetFunctionBoxRun(box); ScriptInput si = new ScriptInput(); foreach (var item in box.InputDatas) { if (item.PIEnum != ParaItemEnum.INPUT) { si.SetValue(item.Name, GetValue(item as ParatItem)); } } ScriptOutput so = RunScript(box, si); //ScriptOutput so = null; ////////////////////////////////////待修改 if (so != null) { if (so.LogMessage != null && so.LogMessage.Equals("") == false) { wrs?.Invoke(so.LogMessage); } foreach (var item in box.OutDatas) { if (item.PIEnum != ParaItemEnum.OUTPUT) { item.Value = so.GetValue(item.Name); SetValue(item as ParatItem); } } } //检测是否需要断点停止 checkScriptRunForStopPoint(box, si, null); if (so != null) { so.Dispose(); so = null; } si.Dispose(); si = null; ml.SetFunctionBoxStop(box); }
/// <summary> /// 选中执行的函数 /// </summary> /// <param name="box"></param> /// <param name="wrs"></param> /// <param name="ml"></param> protected void RunningFunction(IItemBox box, WriteStreamCallBack wrs, IScriptLayout ml) { foreach (var currentbox in (box as ItemBox).Children) { ml.SetFunctionBoxRun(currentbox); if (currentbox.BoxType == ItemBoxEnum.FUNCTION) { Dofunction(currentbox, wrs, ml); } else if (currentbox.BoxType == ItemBoxEnum.IF) { DoIfFunction(currentbox, wrs, ml); } else if (currentbox.BoxType == ItemBoxEnum.WHILE) { DoWhileFunction(currentbox, wrs, ml); } ml.SetFunctionBoxStop(currentbox); } }