From 1afe548ac40cc7f975917ef9bf2e156595cf81f3 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 16 四月 2026 08:58:04 +0800
Subject: [PATCH] 优化;

---
 Plugin.TestResult/TestResultView.xaml.cs |  170 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 113 insertions(+), 57 deletions(-)

diff --git a/Plugin.TestResult/TestResultView.xaml.cs b/Plugin.TestResult/TestResultView.xaml.cs
index 1c93201..3712dc3 100644
--- a/Plugin.TestResult/TestResultView.xaml.cs
+++ b/Plugin.TestResult/TestResultView.xaml.cs
@@ -8,6 +8,7 @@
 using Plugin.TsSupport;
 using System;
 using System.Collections.Generic;
+using System.Runtime.InteropServices;
 using System.Windows;
 using System.Windows.Controls;
 
@@ -26,23 +27,31 @@
         public static Dictionary<string, DataTable> nameTables { get; private set; } = new Dictionary<string, DataTable>();
         private readonly BaseConfig config;
 
-        public AxApplicationMgr testApp;
+
+
         public string testModelFile;
         public string testSeqFile;
-        /// <summary>
-        /// 娴嬭瘯搴忓垪
-        /// </summary>
-        private SequenceFile testSeq = null;
-        public Engine engine;
-        private Execution execution = null;
-        /// <summary>
-        /// 娴嬭瘯搴忓垪鎿嶄綔鍙ユ焺
-        /// </summary>
-        public SequenceContext SequenceContext { get; private set; } = null;
-        /// <summary>
-        /// 娴嬭瘯妯″瀷搴忓垪
-        /// </summary>
-        private SequenceFile modeSeq;
+        public bool inManualDebugMode = false;
+
+        #region TS鐩稿叧
+        //public AxApplicationMgr testApp;
+        ///// <summary>
+        ///// 娴嬭瘯搴忓垪
+        ///// </summary>
+        //private SequenceFile testSeq = null;
+        //public Engine engine;
+        //private Execution execution = null;
+        ///// <summary>
+        ///// 娴嬭瘯搴忓垪鎿嶄綔鍙ユ焺
+        ///// </summary>
+        //public SequenceContext SequenceContext { get; private set; } = null;
+        ///// <summary>
+        ///// 娴嬭瘯妯″瀷搴忓垪
+        ///// </summary>
+        //private SequenceFile modeSeq;
+
+        public ITestExecutionWrapper executionWrapper;
+        #endregion
 
         public TestResultView() : this(new BaseConfig { testing = false })
         {
@@ -53,7 +62,7 @@
 
         public void RefreshCooler()
         {
-            
+
         }
 
         private void RefreshNumberConfig(BaseConfig config)
@@ -133,18 +142,27 @@
 
 
             InitializeComponent();
-            testApp = TestAppManager.GetAxApplicationMgr();
-            testApp.ExitApplication += this.axApplicationMgr_ExitApplication;
-            testApp.UIMessageEvent += this.axApplicationMgr_UIMessageEvent;
-            testApp.ExecutionClosed += this.axApplicationMgr_ExecutionClosed;
+
+            executionWrapper = new TsExecutionWrapper(); //new TsExecutionWrapper();
+            if (executionWrapper is TsExecutionWrapper tsWrapper)
+            {
+                tsWrapper.AxApplicationMgr.ExitApplication += this.axApplicationMgr_ExitApplication;
+                tsWrapper.AxApplicationMgr.UIMessageEvent += this.axApplicationMgr_UIMessageEvent;
+                tsWrapper.AxApplicationMgr.ExecutionClosed += this.axApplicationMgr_ExecutionClosed;
+                ((System.ComponentModel.ISupportInitialize)(tsWrapper.AxApplicationMgr)).BeginInit();//myClient涓虹涓夋柟鎺т欢鍚�
+                host.Child = tsWrapper.AxApplicationMgr;
+                ((System.ComponentModel.ISupportInitialize)(tsWrapper.AxApplicationMgr)).EndInit();
+            }
 
 
-            ((System.ComponentModel.ISupportInitialize)(this.testApp)).BeginInit();//myClient涓虹涓夋柟鎺т欢鍚�
-            host.Child = testApp;
-            ((System.ComponentModel.ISupportInitialize)(this.testApp)).EndInit();
 
-            //InitTestStandEngine();
-            //StartTestSequence();
+            //testApp = TestAppManager.GetAxApplicationMgr();
+            //testApp.ExitApplication += this.axApplicationMgr_ExitApplication;
+            //testApp.UIMessageEvent += this.axApplicationMgr_UIMessageEvent;
+            //testApp.ExecutionClosed += this.axApplicationMgr_ExecutionClosed;
+            //((System.ComponentModel.ISupportInitialize)(this.testApp)).BeginInit();//myClient涓虹涓夋柟鎺т欢鍚�
+            //host.Child = testApp;
+            //((System.ComponentModel.ISupportInitialize)(this.testApp)).EndInit();
         }
 
         private void Refresh()
@@ -203,12 +221,13 @@
         {
             try
             {
-                this.engine = this.testApp.GetEngine();
-                this.engine.PersistBreakpoints = false;
-                this.testApp.IsEditor = true;
-                this.testApp.LoginOnStart = false;
-                this.testApp.Start();
-                this.modeSeq = this.engine.GetSequenceFileEx(testModelFile);
+                //this.engine = this.testApp.GetEngine();
+                //this.engine.PersistBreakpoints = false;
+                //this.testApp.IsEditor = true;
+                //this.testApp.LoginOnStart = false;
+                //this.testApp.Start();
+                //this.modeSeq = this.engine.GetSequenceFileEx(testModelFile);
+                executionWrapper.Init();
             }
             catch (Exception ex)
             {
@@ -222,10 +241,10 @@
             try
             {
                 if (string.IsNullOrEmpty(testSeqFile)) return;
-                this.modeSeq = this.engine.GetSequenceFileEx(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
-                this.testSeq = this.engine.GetSequenceFileEx(this.testSeqFile, 0, TypeConflictHandlerTypes.ConflictHandler_UseGlobalType);
-                this.execution = this.engine.NewExecution(this.testSeq, "Test UUTs", this.modeSeq, false, 0, null, null, null);
-                this.engine.Globals.SetValBoolean("StationState.StopTest", 0, false);
+                executionWrapper?.StartSequence(this.testSeqFile,
+                    @"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
+
+                executionWrapper.SetStationGlobalValue<bool>("StationState.StopTest", 0, false);
             }
             catch (Exception ex)
             {
@@ -238,13 +257,24 @@
         {
             try
             {
-                if (this.SequenceContext == null)
-                    return;
-                bool val = this.SequenceContext.StationGlobals.Exists("StationState.StopTest", 0);
-                if (val)
+                executionWrapper?.SetStationGlobalValue<bool>("StationState.StopTest", 0, true, true);
+                
+                try
                 {
-                    this.SequenceContext.StationGlobals.SetValBoolean("StationState.StopTest", 0, true);
-                    bool isStop = this.execution.WaitForEndEx(2000, true, null, null);
+                    executionWrapper?.WaitForExit();
+                    executionWrapper?.ReleaseSeqFile();
+                }
+                catch (Exception ex)
+                {
+                    ViewControl.Logger.Error("Wait For Exit error.", ex);
+                    //if (ex is NullReferenceException ne)
+                    //{
+
+                    //}
+                    //else
+                    //{
+                    //    throw ex;
+                    //}
                 }
             }
             catch (Exception ex)
@@ -256,7 +286,7 @@
 
         private void axApplicationMgr_ExitApplication(object sender, EventArgs e)
         {
-            Environment.ExitCode = testApp.ExitCode;
+            //Environment.ExitCode = testApp.ExitCode;
             //TSHelper.DoSynchronousGCForCOMObjectDestruction();
         }
 
@@ -286,7 +316,11 @@
                 if (MethodCode == 0)
                 {
                     /// 璁剧疆鍙ユ焺
-                    this.SequenceContext = (SequenceContext)e.uiMsg.ActiveXData;
+                    //this.SequenceContext = (SequenceContext)e.uiMsg.ActiveXData;
+                    if (executionWrapper is TsExecutionWrapper tsWrapper)
+                    {
+                        tsWrapper.context = (SequenceContext)e.uiMsg.ActiveXData;
+                    }
                     return;
                 }
 
@@ -425,6 +459,7 @@
                     int ovenIndex = int.Parse(datas_10015[0]);
                     int cellIndex = int.Parse(datas_10015[1]);
                     tables[ovenIndex].GetSingleCell(cellIndex).ClearInfo();
+                    //GC.Collect();
                     return;
                 }
                 if (MethodCode == 12)
@@ -550,11 +585,13 @@
                     int index = int.Parse(datas[0]);
                     if (MsgBoxHelper2.WarnChoose(datas[1], "鎻愮ず") == MessageBoxResult.OK)
                     {
-                        SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 1);
+                        executionWrapper.SetStationGlobalValue<int>($"StationState.Pipe[{index}]", 1, 1);
+                        //SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 1);
                     }
                     else
                     {
-                        SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 0);
+                        executionWrapper.SetStationGlobalValue<int>($"StationState.Pipe[{index}]", 1, 0);
+                        //SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 0);
                     }
                     return;
                 }
@@ -567,20 +604,34 @@
 
         public void SetStartFlag(int index, bool data)
         {
-            if (this.SequenceContext == null) return;
             string name = tables[index].title;
+            ViewControl.Logger?.Info($"灏嗚�佸寲鐐塠{name}] 鐨凷tart鍙橀噺璁剧疆涓� {data};");
             string key = $"StationState.Start[{index}]";
-            this.engine.Globals.SetValBoolean(key, 1, data);
-            //bool val = this.engine.Globals.GetValBoolean(key, 0);
-            //this.SequenceContext.StationGlobals.SetValBoolean(key, 0, data);
-            //bool val = this.SequenceContext.StationGlobals.GetValBoolean(key, 0);
+
+            executionWrapper?.SetStationGlobalValue<bool>(key, 1, data);
+
+            if (data == false)
+            {
+                key = $"StationState.Scanner[{index}]";
+                executionWrapper?.SetStationGlobalValue<bool>(key, 1, false);
+            }
+        }
+
+        public bool? GetStartFlag(int index)
+        {
+            string key = $"StationState.Start[{index}]";
+            return executionWrapper.GetStationGlobalValue<bool>(key, 0);
         }
 
         public void ReleaseResource()
         {
-            testApp.ExitApplication -= this.axApplicationMgr_ExitApplication;
-            testApp.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
-            testApp.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
+            if (executionWrapper is TsExecutionWrapper tsWrapper)
+            {
+                tsWrapper.AxApplicationMgr.ExitApplication -= this.axApplicationMgr_ExitApplication;
+                tsWrapper.AxApplicationMgr.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
+                tsWrapper.AxApplicationMgr.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
+            }
+
             foreach (var table in tables)
             {
                 table.RelaseResource();
@@ -611,9 +662,10 @@
             for (int i = 0; i < tables.Length; i++)
             {
                 var table = tables[i];
-                // table.SetCurrentProduct(currentProduct);
                 string LookupStr = $"StationState.Model[{i}]";
-                string tableModel = engine?.Globals?.GetValString(LookupStr, 1);
+
+                string tableModel = executionWrapper?.GetStationGlobalValue<string>(LookupStr, 1);
+                //engine?.Globals?.GetValString(LookupStr, 1);
                 table.SetCurrentProduct(tableModel);
             }
         }
@@ -621,8 +673,12 @@
         public void SetOvenProduct(int index, string product)
         {
             string LookupStr = $"StationState.Model[{index}]";
-            engine?.Globals?.SetValString(LookupStr, 1, product);
-            engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+            executionWrapper?.SetStationGlobalValue<string>(LookupStr, 1, product);
+            executionWrapper?.CommitToDisk(false);
+        }
+
+        public void RefreshProducts()
+        {
         }
     }
 }

--
Gitblit v1.9.1