using BiosenSocketService.Runtime; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.SS.Formula.Functions; using Sodao.FastSocket.Server.Messaging; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using XHandler.Class; using XImaging.Automation.Service; using XImaging.Automation.Service.Interface; using static System.Net.Mime.MediaTypeNames; using System.Xml; using XHandler.View; using XCore; using XHandler.Controls; using XImagingXhandler.XDAL; using System.Reflection; using System.Xaml; using XCommon.Log; using XHandler.Controls.Run.Com; using DataRWDAL; using DataEntity.Share; using DataEntity; using System.Windows.Controls; using XImaging.Automation.Service.Instruction; namespace XHandler.Runtime { class DeviceSimulator:ISimulator, IRuntime { public ErrorHandleDelegate errorHandle { get; set; } public ErrorHandleDelegate abortHandle { get; set; } public FinishHandleDelegate finishHandle { get; set; } public string ErrorState { get; set; } public RuntimeState State { get; set; } public int TroubleShoot { get; set; } RuntimeMsgBLL runtimeMsgBLL = new RuntimeMsgBLL(); /// /// 设置挑菌参数 /// /// /// public JObject Method_PhotoParam(Object obj) { State = RuntimeState.OnBusy; JObject result = new JObject(); try { string path = ConfigurationManager.AppSettings.Get("choiceFilePath"); if (File.Exists(path)) { File.Delete(path); } JObject Obj = obj as JObject; string strParams = Obj["parameters"].ToString(); JObject objParam = JObject.Parse(strParams); string experiment_id = objParam["experiment_id"].ToString(); string barcode = objParam["barcode"].ToString(); string bacterias = objParam["bacterias"].ToString(); string shape = objParam["shape"].ToString(); string edge = objParam["edge"].ToString(); string color = objParam["color"].ToString(); string min_diameterSize = objParam["min_diameterSize"].ToString(); string max_diameterSize = objParam["max_diameterSize"].ToString(); string proximity = objParam["proximity"].ToString(); string choice_mode = objParam["choice_mode"].ToString(); string choice_distance_mode = objParam["choice_distance_mode"].ToString(); string choice_distance_value = objParam["choice_distance_value"].ToString(); string choice_xAxis_offsite = objParam["choice_xAxis_offsite"].ToString(); string choice_yAxis_offsite = objParam["choice_yAxis_offsite"].ToString(); string coating_bottom_distance = objParam["coating_bottom_distance"].ToString(); string coating_xAxis_offsite = objParam["coating_xAxis_offsite"].ToString(); string coating_yAxis_offsite = objParam["coating_yAxis_offsite"].ToString(); string coating_mode = objParam["coating_mode"].ToString(); DataTable dtResult=GenerateDataTableByChoiceParams(objParam); bool bRet = ExcelAndCsvHelper.WriteDataTableToExcelFile(dtResult, path); LoggerHelper.InfoLog("write file=" + path + ", return=" + bRet.ToString()); result = JObject.Parse("{method_status:2}"); State = RuntimeState.OnIdle; } catch(Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } return result; } public DataTable GenerateDataTableByChoiceParams(JObject objParam) { //构建datatable DataTable dataResult = new DataTable(); DataColumn dc = new DataColumn(); dc.ColumnName = "中文名"; dataResult.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "属性名"; dataResult.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "属性值"; dataResult.Columns.Add(dc); DataRow dr = dataResult.NewRow(); dr["中文名"] = "实验ID"; dr["属性名"] = "experiment_id"; dr["属性值"]= objParam["experiment_id"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "皿的二维码信息"; dr["属性名"] = "barcode"; dr["属性值"] = objParam["barcode"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "菌名称"; dr["属性名"] = "bacterias"; dr["属性值"] = objParam["bacterias"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "形状"; dr["属性名"] = "shape"; dr["属性值"] = objParam["shape"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "边缘"; dr["属性名"] = "edge"; dr["属性值"] = objParam["edge"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "颜色"; dr["属性名"] = "color"; dr["属性值"] = objParam["color"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "最小直径"; dr["属性名"] = "min_diameterSize"; dr["属性值"] = objParam["min_diameterSize"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "最大直径"; dr["属性名"] = "max_diameterSize"; dr["属性值"] = objParam["max_diameterSize"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "临近度"; dr["属性名"] = "proximity"; dr["属性值"] = objParam["proximity"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "挑菌模式"; dr["属性名"] = "choice_mode"; dr["属性值"] = objParam["choice_mode"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "挑菌距离底部或菌类形"; dr["属性名"] = "choice_distance_mode"; dr["属性值"] = objParam["choice_distance_mode"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "挑菌距离底部或菌类距离"; dr["属性名"] = "choice_distance_value"; dr["属性值"] = objParam["choice_distance_value"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "挑菌时x轴偏移量"; dr["属性名"] = "choice_xAxis_offsite"; dr["属性值"] = objParam["choice_xAxis_offsite"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "挑菌时y轴偏移量"; dr["属性名"] = "choice_yAxis_offsite"; dr["属性值"] = objParam["choice_yAxis_offsite"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "涂布距离底部距离"; dr["属性名"] = "coating_bottom_distance"; dr["属性值"] = objParam["coating_bottom_distance"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "涂布时x轴偏移量"; dr["属性名"] = "coating_xAxis_offsite"; dr["属性值"] = objParam["coating_xAxis_offsite"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "涂布时y轴偏移量"; dr["属性名"] = "coating_yAxis_offsite"; dr["属性值"] = objParam["coating_yAxis_offsite"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "涂布方式"; dr["属性名"] = "coating_mode"; dr["属性值"] = objParam["coating_mode"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "涂布速度"; dr["属性名"] = "coating_speed"; dr["属性值"] = objParam["coating_speed"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "模型类型"; dr["属性名"] = "model_type"; dr["属性值"] = objParam["model_type"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "合并识别"; dr["属性名"] = "merge_masks"; dr["属性值"] = objParam["merge_masks"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "降采样率"; dr["属性名"] = "ds_ratio"; dr["属性值"] = objParam["ds_ratio"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "平均直径"; dr["属性名"] = "mean_diam"; dr["属性值"] = objParam["mean_diam"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "到边缘距离"; dr["属性名"] = "dist_to_edge"; dr["属性值"] = objParam["dist_to_edge"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "菌标记颜色"; dr["属性名"] = "mark_color"; dr["属性值"] = objParam["mark_color"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "菌标记序号"; dr["属性名"] = "draw_label"; dr["属性值"] = objParam["draw_label"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "菌标记字体大小"; dr["属性名"] = "fontsize"; dr["属性值"] = objParam["fontsize"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "顶部背光亮度"; dr["属性名"] = "top_light"; dr["属性值"] = objParam["top_light"].ToString(); dataResult.Rows.Add(dr); dr = dataResult.NewRow(); dr["中文名"] = "底部背光亮度"; dr["属性名"] = "bottom_light"; dr["属性值"] = objParam["bottom_light"].ToString(); dataResult.Rows.Add(dr); return dataResult; } /// /// 设置涂布数据 /// /// /// public JObject Method_RunDataParam(Object obj) { JObject result = new JObject(); try { State = RuntimeState.OnBusy; DataTable dt = new DataTable(); dt.Columns.Add("来源板", typeof(string)); dt.Columns.Add("来源板码", typeof(string)); dt.Columns.Add("来源孔", typeof(string)); dt.Columns.Add("目标板", typeof(string)); dt.Columns.Add("目标板码", typeof(string)); dt.Columns.Add("目标孔", typeof(string)); dt.Columns.Add("移液体积", typeof(string)); dt.Columns.Add("是否更换吸头", typeof(string)); JObject Obj = obj as JObject; string objstr = Obj["parameters"].ToString(); //objstr = objstr.Replace("\\",""); Dictionary strdata = JsonConvert.DeserializeObject>(objstr); List strdata1 = JsonConvert.DeserializeObject>(strdata["Method_Coatingfile_Param"].ToString()); //JObject jObjAll = JObject.Parse(strdata["Method_Coatingfile_Param"].ToString()); //string objstr1 = jObjAll["Method_Coatingfile_Param"].ToString(); //JArray jary = (JArray)Obj["parameters"]["Method_Coatingfile_Param"]; foreach (SetCoatingData_param sd in strdata1) { DataRow dr = dt.NewRow(); int i = 0; dr["来源板"] = sd.SourcePlateID.ToString(); dr["来源板码"] = sd.SourcePlateBarcode.ToString(); dr["来源孔"] = sd.SourcePlateWell.ToString(); dr["目标板"] = sd.TargetPlateID.ToString(); dr["目标板码"] = sd.TargetPlateBarcode.ToString(); dr["目标孔"] = sd.TargetPlateWell.ToString(); dr["移液体积"] = sd.Volume.ToString(); dr["是否更换吸头"] = sd.changetips.ToString(); dt.Rows.Add(dr); } string filePath = strdata["PickAndCoatTable"].ToString(); string file = filePath; string path = file.Substring(0, file.LastIndexOf('\\')); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); LoggerHelper.InfoLog("creat directory: " + path); } ExcelAndCsvHelper.WriteDataTableToCSV(dt, file); bool bRet = true; LoggerHelper.InfoLog("write file=" + file + ", return=" + bRet.ToString()); //if (File.Exists(profile.Data_file)) //{ // File.Delete(profile.Data_file); // BiosenLogger.Debug("delete file: " + profile.Data_file); //} //File.Copy(file, profile.Data_file, true); //BiosenLogger.Debug("copy file: " + profile.Data_file); if (!bRet) { State = RuntimeState.OnError; result = JObject.Parse("{method_status:3}"); throw new Exception("Execute was failed!"); } else if (bRet) { State = RuntimeState.OnIdle; result = JObject.Parse("{method_status:2}"); } State = RuntimeState.OnIdle; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } return result; } /// /// 运行方法 /// /// /// public JObject Method_Run(Object obj) { State = RuntimeState.OnBusy; JObject result = new JObject(); try { JObject job = obj as JObject; string strParam = string.Empty; string methodFileName = string.Empty; strParam = job["parameters"].ToString(); JObject jobParms = JObject.Parse(strParam); methodFileName = jobParms["FlowName"].ToString(); string shortDir = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString(); string fullName = shortDir + "\\" + methodFileName + ".xmed"; if (File.Exists(fullName)) { XmlDocument xmlDocument = new XmlDocument(); //XmlDocument xmlDocument.Load(fullName); App.Current.Dispatcher.Invoke(new Action(() => { RunWnd runWnd = new RunWnd(); //runWnd.OnError += (p1, p2, p3,p4,p5) => { this.errorHandle(p1, p2, p3,p4,p5); }; runWnd.xmlDocument = xmlDocument; runWnd.isRemotingOper = true; runWnd.EnableSimulator = ConfigurationManager.AppSettings["IsSimulator"].ToString().ToLower() == "true" ? true : false; TaskFactory taskFactory = new TaskFactory(); int iresult = runWnd.LoadLabwareOnRunningRemote(); if (iresult == 0) { State = RuntimeState.OnError; result = JObject.Parse("{method_status:3}"); throw new Exception("Execute was failed!"); } else if (iresult == 1) { State = RuntimeState.OnIdle; string j = JsonConvert.SerializeObject(runWnd.dataTableTotal); result = JObject.Parse("{data:" + j + "}"); } else if (iresult == 2) { State = RuntimeState.OnIdle; result = JObject.Parse("{method_status:4}"); } })); } else { //弹出窗口提示所执行的方法不存在 } State = RuntimeState.OnIdle; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); State = RuntimeState.OnError; throw new Exception() { }; } return result; } /// /// 运行抓板方法,抓耗材命令 /// /// /// public JObject Method_Move(Object obj) { State = RuntimeState.OnBusy; JObject result = new JObject(); try { JObject job = obj as JObject; string strParam = string.Empty; string methodFileName = string.Empty; string strSrouceLatticeName = string.Empty; string strTargetLatticeName = string.Empty; int iGripperLabwarePos = 1; int iGripperLatticeDriector = 1; strParam = job["parameters"].ToString(); JObject jobParms = JObject.Parse(strParam); strSrouceLatticeName = jobParms["SrcPosition"].ToString(); strTargetLatticeName = jobParms["TarPosition"].ToString(); iGripperLatticeDriector = Convert.ToInt32(jobParms["Griperpos"].ToString()); iGripperLabwarePos = Convert.ToInt32(jobParms["IsOpenlid"].ToString()); methodFileName = jobParms["FlowName"].ToString(); string shortDir = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString(); string fullName = shortDir + "\\" + methodFileName + ".xmed"; if (File.Exists(fullName)) { XmlDocument xmlDocument = new XmlDocument(); //XmlDocument xmlDocument.Load(fullName); xmlDocument = UpdateGripMoveParamByxml(xmlDocument, jobParms); App.Current.Dispatcher.Invoke(new Action(() => { RunWnd runWnd = new RunWnd(); runWnd.xmlDocument = xmlDocument; runWnd.isRemotingOper = true; runWnd.EnableSimulator = ConfigurationManager.AppSettings["IsSimulator"].ToString().ToLower() == "true" ? true : false; TaskFactory taskFactory = new TaskFactory(); int iresult = runWnd.LoadLabwareOnRunningRemote(); if (iresult == 0) { State = RuntimeState.OnError; result = JObject.Parse("{method_status:3}"); } else if (iresult == 1) { State = RuntimeState.OnError; result = JObject.Parse("{method_status:2}"); } else if (iresult == 2) { State = RuntimeState.OnError; result = JObject.Parse("{method_status:4}"); } })); } else { //弹出窗口提示所执行的方法不存在 } State = RuntimeState.OnIdle; } catch(Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } return result; } public XmlDocument UpdateGripMoveParamByxml(XmlDocument xmlDocument,JObject jobParms) { XmlDocument xmlResult = new XmlDocument(); MethodListBll methodListBll = new MethodListBll(); XmlNodeList xmlNodeMethodList = xmlDocument.SelectNodes("root/method[@id>=3]"); //清空方法列表 for (int n = 0; n < xmlNodeMethodList.Count; n++) { string MethodName = xmlNodeMethodList[n].SelectSingleNode("name").InnerText; string id = xmlNodeMethodList[n].Attributes["id"].Value.ToString(); int iNum = methodListBll.getNumByMethodName(MethodName); switch (iNum) { case (int)MethodNameEnum.griptransport: if (xmlNodeMethodList[n].SelectSingleNode("status").InnerText == "enable") { //xmlNodeMethodList[n].SelectSingleNode("sourceLattice/value").InnerText = jobParms["SrcPosition"].ToString(); xmlNodeMethodList[n].SelectSingleNode("sourceLattice/text").InnerText = jobParms["SrcPosition"].ToString(); TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断 Lattice srcLattice = null; if (tabletopTemplate == null) { srcLattice = LatticeDB.GetLatticeDataByIdFromdb(jobParms["SrcPosition"].ToString(), Shared.ChanelArmId, Shared.SoftwareInformation.software_device_number); } else { srcLattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(jobParms["SrcPosition"].ToString(), Convert.ToInt32(Shared.ChanelArmId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid); } xmlNodeMethodList[n].SelectSingleNode("sourceLattice/value").InnerText = srcLattice.lattice_id; xmlNodeMethodList[n].SelectSingleNode("sourceLattice/type").InnerText = "2"; //xmlNodeMethodList[n].SelectSingleNode("destinationLattice/value").InnerText = jobParms["TarPosition"].ToString(); xmlNodeMethodList[n].SelectSingleNode("destinationLattice/text").InnerText = jobParms["TarPosition"].ToString(); Lattice desLattice = null; if (tabletopTemplate == null) { desLattice = LatticeDB.GetLatticeDataByIdFromdb(jobParms["TarPosition"].ToString(), Shared.ChanelArmId, Shared.SoftwareInformation.software_device_number); } else { desLattice = LatticeDB.GetLatticeDataByLatticeNumAndTempIdFromdb(jobParms["SrcPosition"].ToString(), Convert.ToInt32(Shared.ChanelArmId), Shared.SoftwareInformation.software_device_number, tabletopTemplate.tabletopid); } xmlNodeMethodList[n].SelectSingleNode("destinationLattice/value").InnerText = desLattice.lattice_id; xmlNodeMethodList[n].SelectSingleNode("destinationLattice/type").InnerText = "2"; if (jobParms["SrcGriperpos"].ToString()=="1") { xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位右侧"; } else if (jobParms["SrcGriperpos"].ToString() == "2") { xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位左侧"; } else if (jobParms["SrcGriperpos"].ToString() == "3") { xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位上侧"; } else { xmlNodeMethodList[n].SelectSingleNode("gripModel/text").InnerText = "夹爪轴心在板位下侧"; } xmlNodeMethodList[n].SelectSingleNode("gripModel/value").InnerText = jobParms["SrcGriperpos"].ToString(); if (jobParms["TarGriperpos"].ToString() == "1") { xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位右侧"; } else if (jobParms["TarGriperpos"].ToString() == "2") { xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位左侧"; } else if (jobParms["TarGriperpos"].ToString() == "3") { xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位上侧"; } else { xmlNodeMethodList[n].SelectSingleNode("gripModelSet/text").InnerText = "夹爪轴心在板位下侧"; } xmlNodeMethodList[n].SelectSingleNode("gripModelSet/value").InnerText = jobParms["TarGriperpos"].ToString(); if (jobParms["Boardpos"].ToString()=="1") { xmlNodeMethodList[n].SelectSingleNode("gripModelPos/text").InnerText = "底部"; } else { xmlNodeMethodList[n].SelectSingleNode("gripModelPos/text").InnerText = "顶部"; } xmlNodeMethodList[n].SelectSingleNode("gripModelPos/value").InnerText = jobParms["Boardpos"].ToString(); //if (jobParms["TargetType"].ToString() == "1") //{ // xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "圆形皿"; // xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = "1"; //} //else if (jobParms["TargetType"].ToString() == "3") //{ // xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "短底耗材"; // xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = "3"; //} //else //{ // xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "正常耗材"; // xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = "2"; //} xmlNodeMethodList[n].SelectSingleNode("gripPickObject/text").InnerText = "耗材"; xmlNodeMethodList[n].SelectSingleNode("gripPickObject/value").InnerText = jobParms["BoardId"].ToString(); } break; default: break; } } return xmlDocument; } /// /// 拍照 /// /// /// public JObject Method_TakePhoto(Object obj) { State = RuntimeState.OnBusy; JObject result = new JObject(); try { JObject job = obj as JObject; //string strParam = string.Empty; //string methodFileName = string.Empty; //string strSrouceLatticeName = string.Empty; //string strTargetLatticeName = string.Empty; //int iGripperLabwarePos = 1; //int iGripperLatticeDriector = 1; //strParam = job["parameters"].ToString(); //JObject jobParms = JObject.Parse(strParam); //strSrouceLatticeName = jobParms["SrcPosition"].ToString(); //strTargetLatticeName = jobParms["TarPosition"].ToString(); //iGripperLatticeDriector = Convert.ToInt32(jobParms["Griperpos"].ToString()); //iGripperLabwarePos = Convert.ToInt32(jobParms["IsOpenlid"].ToString()); //methodFileName = jobParms["FlowName"].ToString(); //string shortDir = ConfigurationManager.AppSettings["MethodFileBasePath"].ToString(); //string fullName = AppDomain.CurrentDomain.BaseDirectory + shortDir + "\\" + methodFileName + ".xmed"; //if (File.Exists(fullName)) //{ // XmlDocument xmlDocument = new XmlDocument(); // //XmlDocument // xmlDocument.Load(fullName); // xmlDocument = UpdateGripMoveParamByxml(xmlDocument, jobParms); // App.Current.Dispatcher.Invoke(new Action(async () => // { // RunWnd runWnd = new RunWnd(); // runWnd.xmlDocument = xmlDocument; // runWnd.isRemotingOper = true; // runWnd.EnableSimulator = ConfigurationManager.AppSettings["IsSimulator"].ToString().ToLower() == "true" ? true : false; // await Task.Factory.StartNew(() => runWnd.LoadLabwareOnRunning(), runWnd._cancelSource.Token); // })); // result = JObject.Parse("{method_status:2}"); //} //else //{ // //弹出窗口提示所执行的方法不存在 //} result = JObject.Parse("{method_status:2}"); State = RuntimeState.OnIdle; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } return result; } public void RunTest(Object obj) { State = RuntimeState.OnBusy; JObject result = new JObject(); JObject Obj = obj as JObject; State = RuntimeState.OnIdle; } #region 接口中的3个方法 public void ReplyAbort() { } public void ReplyRetry() { } public void ReplyIgnore() { } #endregion public void Dispose(string methodName) { if (errorHandle == null) return; var list = errorHandle.GetInvocationList(); foreach (Delegate del in list) { TaskInstruction taskInstruction = del.Target as TaskInstruction; if (taskInstruction.InsName == methodName) { object delObj = del.GetType().GetProperty("Method").GetValue(del, null); string funcName = (string)delObj.GetType().GetProperty("Name").GetValue(delObj, null); Console.WriteLine(funcName); errorHandle -= del as ErrorHandleDelegate; } } } } }