using CSScriptLib; using Prism.Events; using Prism.Ioc; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Documents; using System.Windows.Forms; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; namespace TeamAAS_VP.Core { public class ScriptHelper { /// /// 编译脚本 /// /// /// /// /// public static Tuple> Compile(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container) { try { var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic); IBackgroundScripting scripting = eval.LoadCode(strSourceCode); scripting.regionManager = regionManager; scripting.eventAggregator = ea; scripting.container = container; return new Tuple>(true, null); } catch (CSScriptLib.CompilerException e1) { string[] items = e1.Message.Split('\n'); List list = new List(); foreach (var item in items) { if (string.IsNullOrEmpty(item)) { break; } list.Add(item.TrimEnd('\r')); } return new Tuple>(false, list); } catch (Exception ex) { List list = new List(); list.Add(ex.Message); return new Tuple>(false, list); } } /// /// 编译脚本 /// /// /// /// /// public static Task>> CompileAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container) { return Task.Run(() => { try { var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic); IBackgroundScripting scripting = eval.LoadCode(strSourceCode); scripting.regionManager = regionManager; scripting.eventAggregator = ea; scripting.container = container; return Task.FromResult>>(new Tuple>(true, null)); } catch (CSScriptLib.CompilerException e1) { string[] items = e1.Message.Split('\n'); List list = new List(); foreach (var item in items) { if (string.IsNullOrEmpty(item)) { break; } list.Add(item.TrimEnd('\r')); } return Task.FromResult>>(new Tuple>(false, list)); } catch (Exception ex) { List list = new List(); list.Add(ex.Message); return Task.FromResult>>(new Tuple>(false, list)); } }); } /// /// 执行理脚本 /// /// /// /// /// /// /// public static Task ExecuteScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container,Action> callback) { try { var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic); IBackgroundScripting scripting = eval.LoadCode(strSourceCode); scripting.regionManager = regionManager; scripting.eventAggregator = ea; scripting.container = container; scripting.management = container.Resolve(); scripting.CurrentProduct = scripting.management.CurrentProduct; return scripting.Execute(); } catch (CSScriptLib.CompilerException e1) { List list = new List(); foreach (var item in e1.Message.Split('\n')) { if (string.IsNullOrEmpty(item)) { break; } list.Add(item.TrimEnd('\r')); } callback.Invoke(new Tuple(false, list.ToArray())); return Task.CompletedTask; } catch (Exception ex) { List list = new List(); list.Add(ex.Message); callback.Invoke(new Tuple(false, list.ToArray())); return Task.CompletedTask; } } /// /// 执行视觉处理脚本 /// /// /// /// /// /// /// /// /// public static async Task>> ExecuteVisionScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, ProcedureModel procedure, string[] items, Action> callback) { try { var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic); IVisionScripting scripting = eval.LoadCode(strSourceCode); scripting.regionManager = regionManager; scripting.eventAggregator = ea; scripting.container= container; scripting.management= container.Resolve(); scripting.CurrentProduct = scripting.management.CurrentProduct; await scripting.Execute(procedure, items, rst => { callback.Invoke(rst); }); return new Tuple>(true, null); } catch (CSScriptLib.CompilerException e1) { List list = new List(); foreach (var item in e1.Message.Split('\n')) { if (string.IsNullOrEmpty(item)) { break; } list.Add(item.TrimEnd('\r')); } return new Tuple>(false, list); } catch (Exception ex) { List list = new List(); list.Add(ex.Message); return new Tuple>(false, list); } } /// /// 编译视觉处理脚本 /// /// /// /// /// /// /// /// /// public static Task>> CompileVisionScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, ProcedureModel procedure, string[] items, Action> callback) { return Task.Run(async () => { try { var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic); IVisionScripting scripting = eval.LoadCode(strSourceCode); scripting.regionManager = regionManager; scripting.eventAggregator = ea; scripting.container = container; return new Tuple>(true, null); } catch (CSScriptLib.CompilerException e1) { List list = new List(); foreach (var item in e1.Message.Split('\n')) { if (string.IsNullOrEmpty(item)) { break; } list.Add(item.TrimEnd('\r')); } return new Tuple>(false, list); } catch (Exception ex) { List list = new List(); list.Add(ex.Message); return new Tuple>(false, list); } }); } } }