protected virtual void DisposeSelf() { /* [d20210220] * 沒人參考它時, 有機率被釋放 * 但其參考的 Task, 其實還沒完工 * 1. 若此 Task 只是沒人參考, 不應強制Dispose * 2. 若此 Task 是應用程式結束時, 應被強制關閉 * 原生Task選擇不關閉, 應自主結束 * 但這邊考量的是應正確釋放資源 * * 或許原生才是對的, 你不應強制關閉Task, * (1) 該Task要有自主判斷停止的功能, * (2) 應用程式強制關閉時, 其實Task也會被關閉 * 所以, 若你要用一個不受控的Task, 那不如用原生的 * * 結論: 其實原生Task 你也沒辦法強制關閉它, 你也只能直接Try/Catch起來 */ if (this.Task != null) { //只增加Cancel的呼叫, 剩的用父類別的 if (this.Status < TaskStatus.RanToCompletion) { this.CancelTokenSource.Cancel(); } //統一Dispose的方法, 有例外仍舊扔出, 確保在預期內 MvaUtil.DisposeTask(this.Task); this.Task = null; } }
public HalRobotMotion Clone() { var buffer = MvaUtil.SerializeBinary(this); var rtn = MvaUtil.DeserializeBinary <HalRobotMotion>(buffer); return(rtn); }
public Dictionary <EnumMacHalPlcVariable, Object> ReadMulti(IEnumerable <EnumMacHalPlcVariable> varNames) { var names = varNames.Select(x => x.ToString()).ToArray(); var table = this.PlcLdd.ReadMulti(names); var rtn = new Dictionary <EnumMacHalPlcVariable, Object>(); foreach (DictionaryEntry kv in table) { var key = MvaUtil.EnumParse <EnumMacHalPlcVariable>(kv.Key as String); rtn[key] = kv.Value; } return(rtn); }
public void TestRobotPathSerialize() { var robotPath = new HalRobotPath() { Name = "Test", Remark = "Test", }; var robotMotion = new HalRobotMotion() { X = 1.1f, Y = 2.2f, Z = 3.3f, W = 4.4f, P = 5.5f, R = 6.6f, E1 = 7.7f, UserFrame = 1, UserTool = 1, Speed = 60, MotionType = HalRobotEnumMotionType.Position, }; robotPath.Motions.Add(robotMotion); robotMotion = robotMotion.Clone(); robotMotion.X += 1; robotPath.Motions.Add(robotMotion); robotMotion = robotMotion.Clone(); robotMotion.X += 1; robotPath.Motions.Add(robotMotion); MvaUtil.SaveXmlToFile(robotPath, robotPath.Name + ".xml"); var loadPath = MvaUtil.LoadFromXmlFile <HalRobotPath>(robotPath.Name + ".xml"); var loadMotion = loadPath.Motions.LastOrDefault(); Assert.AreEqual(robotMotion.X, loadMotion.X); Assert.AreEqual(robotMotion.Z, loadMotion.Z); Assert.AreEqual(robotMotion.Y, loadMotion.Y); Assert.AreEqual(robotMotion.W, loadMotion.W); Assert.AreEqual(robotMotion.P, loadMotion.P); Assert.AreEqual(robotMotion.R, loadMotion.R); Assert.AreEqual(robotMotion.E1, loadMotion.E1); Assert.AreEqual(robotMotion.J1, loadMotion.J1); Assert.AreEqual(robotMotion.J2, loadMotion.J2); Assert.AreEqual(robotMotion.J3, loadMotion.J3); Assert.AreEqual(robotMotion.J4, loadMotion.J4); Assert.AreEqual(robotMotion.J5, loadMotion.J5); Assert.AreEqual(robotMotion.J6, loadMotion.J6); Assert.AreEqual(robotMotion.J7, loadMotion.J7); Assert.AreEqual(robotMotion.UserFrame, loadMotion.UserFrame); Assert.AreEqual(robotMotion.UserTool, loadMotion.UserTool); Assert.AreEqual(robotMotion.Speed, loadMotion.Speed); }
public T GetDevConnStrEnum <T>(string key) { return(MvaUtil.EnumParse <T>(this.DevSettings[key] as string)); }
/// <summary> /// serialize (序列化) manifest object, and save as xml file /// </summary> /// <param name="manifest">MachineManifest object</param> /// <param name="filePath">xml file path for saving</param> public static void SaveToXmlFile(MacManifestCfg manifest, string filePath) { MvaUtil.SaveXmlToFile(manifest, filePath); }
/// <summary> /// deserialize (反序列化) MachineManifest object from xml file /// </summary> /// <param name="filePath">xml file path for loading</param> /// <returns></returns> public static MacManifestCfg LoadFromXmlFile(string filePath) { return(MvaUtil.LoadFromXmlFile <MacManifestCfg>(filePath)); }
public void SaveToXmlFile(string fn) { MvaUtil.SaveXmlToFile(this, fn); }
public T GetDevConnSettingEnum <T>(string key) { return(MvaUtil.EnumParse <T>(this.GetDevConnSetting(key))); }