Exemple #1
0
        private async void StartScript()
        {
            var documentFile = documentService.ActiveDocumentFile;

            runScriptCancellation = new CancellationTokenSource();
            var cancellationToken = runScriptCancellation.Token;

            RunningDocument = documentFile;
            startCommand.RaiseCanExecuteChanged();
            stopCommand.RaiseCanExecuteChanged();

            OutputViewModel.ClearOutput(documentFile);

            if (lastBuildResult == null || lastBuildResult.Item1 != documentFile)
            {
                using (new PerformanceTrace("BuildAsync", documentFile))
                {
                    var result = await workspace.BuildAsync(documentIds[documentFile], CancellationToken.None);

                    documentFile.Content.ErrorList = result.Diagnostic.Where(x => x.Severity != DiagnosticSeverity.Hidden).Select(CreateErrorListItem).ToArray();
                    if (result.InMemoryAssembly != null)
                    {
                        lastBuildResult = new Tuple <DocumentFile, BuildResult>(documentFile, result);
                    }
                    else
                    {
                        lastBuildResult = null;
                    }
                }
            }

            if (lastBuildResult != null)
            {
                using (new PerformanceTrace("RunScriptAsync", documentFile))
                {
                    var buildResult = lastBuildResult.Item2;
                    try
                    {
                        await host.RunScriptAsync(buildResult.InMemoryAssembly, buildResult.InMemorySymbolStore, outputTextWriter, errorTextWriter, cancellationToken);
                    }
                    catch (OperationCanceledException)
                    {
                    }
                }
                ShellViewModel.IsOutputViewVisible = true;
            }
            else
            {
                ShellViewModel.IsErrorListViewVisible = true;
            }

            RunningDocument       = null;
            runScriptCancellation = null;
            startCommand.RaiseCanExecuteChanged();
            stopCommand.RaiseCanExecuteChanged();
        }