diff options
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Basic')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs index 7500e404f..30fbed006 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs @@ -147,7 +147,14 @@ namespace Tango.Scripting.Basic } else { - code += Environment.NewLine + Environment.NewLine + "new Program().OnExecute(GlobalContext);"; + if (code.Contains("OnExit(IProcedureContext context)")) + { + code += Environment.NewLine + Environment.NewLine + "var pr = new Program(); GlobalContext.OnExitAction = pr.OnExit; pr.OnExecute(GlobalContext);"; + } + else + { + code += Environment.NewLine + Environment.NewLine + "new Program().OnExecute(GlobalContext);"; + } mainScriptCode = code; } } @@ -208,8 +215,36 @@ namespace Tango.Scripting.Basic Thread scriptThread = null; ProjectSession<T> session = null; + var prop = typeof(T).GetProperty("OnExitAction"); + bool exitActionExecuted = false; + session = new ProjectSession<T>(this, () => { + Action<T> onExitAction = prop?.GetValue(context) as Action<T>; + + if (onExitAction != null && !exitActionExecuted) + { + exitActionExecuted = true; + bool completed = false; + DateTime startDate = DateTime.Now; + + Task.Factory.StartNew(() => + { + onExitAction(context); + completed = true; + }); + + while (!completed) + { + Thread.Sleep(10); + + if (DateTime.Now > startDate.AddSeconds(5)) + { + break; + } + } + } + scriptThread.Abort(); }); |
