aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs')
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Basic/Project.cs37
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();
});