Пример #1
0
        private void CommandRunScriptExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            e.Handled = true;

            var pipe = m_CreateNewScriptOutputPipe();

            pipe.OnScriptOutput += new EventHandler <ScriptOutputEventArgs>(OnScriptOutput);

            m_ScriptRunInfo = new ScriptRunInformation
            {
                Language     = Model.ScriptLanguage.Language,
                Script       = textEditor.Text,
                ScriptOutput = pipe,
            };
            Model.RunCommand.Execute(m_ScriptRunInfo);
            m_ScriptRunInfo.ScriptRunningTask.ContinueWith(
                t =>
            {
                if (t.Status == TaskStatus.Faulted)
                {
                    WriteToOutputWindow(t.Exception.ToString());
                }

                m_ScriptRunInfo.ScriptOutput.OnScriptOutput += new EventHandler <ScriptOutputEventArgs>(OnScriptOutput);
                m_ScriptRunInfo = null;
            },
                TaskContinuationOptions.None);
        }
Пример #2
0
        public void CancelScriptRun()
        {
            using (var source = new CancellationTokenSource())
            {
                using (var task = Task.Factory.StartNew(
                           () => { },
                           source.Token,
                           TaskCreationOptions.None,
                           new CurrentThreadTaskScheduler()))
                {
                    var tuple      = new Tuple <Task, CancellationTokenSource>(task, source);
                    var scriptHost = new Mock <IHostScripts>();
                    {
                        scriptHost.Setup(s => s.Execute(It.IsAny <ScriptLanguage>(), It.IsAny <string>(), It.IsAny <TextWriter>()))
                        .Returns(tuple);
                    }

                    var command = new RunScriptCommand(scriptHost.Object);
                    Assert.IsTrue(command.CanExecute(null));

                    var info = new ScriptRunInformation
                    {
                        Language     = ScriptLanguage.IronPython,
                        Script       = "a",
                        ScriptOutput = new ScriptOutputPipe(),
                    };
                    command.Execute(info);

                    Assert.AreSame(tuple.Item1, info.ScriptRunningTask);
                    Assert.AreSame(tuple.Item2, info.CancellationToken);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Runs a given script.
        /// </summary>
        /// <param name="scriptHost">The object that controls the script system.</param>
        /// <param name="info">The information describing the running script.</param>
        private static void OnRunScript(IHostScripts scriptHost, ScriptRunInformation info)
        {
            // If there is no facade then we're in design mode or something
            // else weird.
            if ((scriptHost == null) || (info == null))
            {
                return;
            }

            var result = scriptHost.Execute(info.Language, info.Script, info.ScriptOutput as TextWriter);

            info.ScriptRunningTask = result.Item1;
            info.CancellationToken = result.Item2;
        }
Пример #4
0
        /// <summary>
        /// Cancels the running of the script.
        /// </summary>
        /// <param name="scriptHost">The object that controls the script system.</param>
        /// <param name="info">The information describing the running script.</param>
        /// <param name="timer">The function that creates and stores timing intervals.</param>
        private static void OnCancelScriptRun(IHostScripts scriptHost, ScriptRunInformation info, Func <string, IDisposable> timer)
        {
            // If there is no facade then we're in design mode or something
            // else weird.
            if (scriptHost == null)
            {
                return;
            }

            if (info != null)
            {
                using (timer("Cancelling script run"))
                {
                    // Note that the cancellation may take some time ...?
                    info.CancellationToken.Cancel();
                    info.ScriptRunningTask.Wait();
                }
            }
        }
Пример #5
0
 private void CommandCancelRunScriptExecuted(object sender, ExecutedRoutedEventArgs e)
 {
     e.Handled = true;
     try
     {
         Model.CancelRunCommand.Execute(m_ScriptRunInfo);
         try
         {
             m_ScriptRunInfo.ScriptRunningTask.Wait();
         }
         catch (AggregateException exception)
         {
             WriteToOutputWindow(exception.ToString());
         }
     }
     finally
     {
         m_ScriptRunInfo.ScriptOutput.OnScriptOutput -= new EventHandler <ScriptOutputEventArgs>(OnScriptOutput);
         m_ScriptRunInfo = null;
     }
 }
Пример #6
0
        /// <summary>
        /// Closes the script host.
        /// </summary>
        /// <param name="scriptHost">The object that controls the script system.</param>
        /// <param name="info">The information describing the running script.</param>
        /// <param name="timer">The function that creates and stores timing intervals.</param>
        private static void OnCloseScript(IHostScripts scriptHost, ScriptRunInformation info, Func <string, IDisposable> timer)
        {
            // If there is no facade then we're in design mode or something
            // else weird.
            if (scriptHost == null)
            {
                return;
            }

            // All we do in here is to stop the script if it is running. There is nothing else to do
            if (info != null)
            {
                using (timer("Closing script"))
                {
                    if ((info.CancellationToken != null) && (info.ScriptRunningTask != null))
                    {
                        info.CancellationToken.Cancel();
                        info.ScriptRunningTask.Wait();
                    }
                }
            }
        }
Пример #7
0
        public void CloseScript()
        {
            var scriptHost = new Mock <IHostScripts>();
            {
                scriptHost.Setup(s => s.IsExecutingScript)
                .Returns(true);
            }

            Func <string, IDisposable> func = s => new MockDisposable();

            var command = new CloseScriptCommand(scriptHost.Object, func);

            Assert.IsTrue(command.CanExecute(null));

            var info = new ScriptRunInformation
            {
                ScriptRunningTask = Task.Factory.StartNew(() => { }),
                CancellationToken = new CancellationTokenSource(),
            };

            command.Execute(info);

            Assert.IsTrue(info.CancellationToken.IsCancellationRequested);
        }