using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using CMS_CORE; using CMS_CORE.Demo; using CMS_CORE.Fanuc; using CMS_CORE.Osai; using CMS_CORE.Siemens; using Step.NC; using static Step.Config.StartupConfig; using static Step.Utils.Constants; using TeamDev.SDK.MVVM; using System.Diagnostics; namespace Step.Core { public static class ThreadsHandler { private static List ThreadFunctionsList = new List { ThreadsFunctions.Read_Alarms, ThreadsFunctions.Read_Nc_Generic_Info, ThreadsFunctions.Read_Axes }; private static List RunningThreadsList = new List(); internal static Dictionary RunningThreadStatus = new Dictionary(); private static Thread StatThread; public static void Start() { ThreadsFunctions.TryNcConnection(); } public static void StartWorkers() { lock (RunningThreadsList) { RunningThreadStatus.Clear(); // For each function run in the list a thread ThreadFunctionsList.ForEach(threadFunction => { // Run new Thread in the list Thread t = new Thread(() => threadFunction() ); t.Start(); // Add thread to running threads list RunningThreadsList.Add(t); RunningThreadStatus.Add(threadFunction.Method.Name, "---"); }); MessageServices.Current.Publish(MVVM_NC_THREADS, null, RunningThreadStatus); StatThread = new Thread(() => ThreadsFunctions.StatThread()); StatThread.Start(); } } public static void Stop() { // Stop each thread RunningThreadsList.ForEach(thread => { thread.Abort(); }); if(StatThread != null) StatThread.Abort(); // No running status RunningThreadsList.Clear(); lock (RunningThreadsList) { RunningThreadStatus.Clear(); RunningThreadStatus.Add("TryNcConnection", "---"); MessageServices.Current.Publish(MVVM_NC_THREADS, null, RunningThreadStatus); } } } }