private void StopThread() { ProcessLauncher processLauncher = null; Thread buildThread = null; lock (_lock) { processLauncher = _processLauncher; buildThread = _buildThread; } if (processLauncher != null && buildThread != null) { try { processLauncher.Stop(); buildThread.Join(); _output.WriteLine("Build stopped."); } catch (Exception ex) { _output.WriteLine("An error occurred trying to stop the build:"); _output.WriteLine(ex.Message); } lock (_lock) { _lastBuildWasStopped = true; _isBeingStopped = false; } } }
private int Run(string[] args) { _output = new ConsoleOutput(); try { BuildOptions options = ParseBuildOptions(args); if (options == null || options.Solution == null) { return(1); } GlobalSettings globalSettings = GlobalSettings.Load(_output); globalSettings.Save(); var settings = new Settings(globalSettings, options, _output); var stopwatch = new Stopwatch(); stopwatch.Start(); int exitCode = 0; if (options.CleanCache) { CacheCleaner.Run(settings); } else { var solutionReaderWriter = new SolutionReaderWriter(settings); SolutionInfo solutionInfo = solutionReaderWriter.ReadWrite(options.Solution.FullName); settings.SolutionSettings = SolutionSettings.Load(settings, solutionInfo); var projectReaderWriter = new ProjectReaderWriter(settings); projectReaderWriter.ReadWrite(solutionInfo); settings.SolutionSettings.UpdateAndSave(settings, solutionInfo); if (!options.GenerateOnly) { var processLauncher = new ProcessLauncher(settings); Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs cancelArgs) { _output.WriteLine("Stopping build..."); processLauncher.Stop(); cancelArgs.Cancel = true; }; exitCode = processLauncher.Run(solutionInfo); } } stopwatch.Stop(); TimeSpan ts = stopwatch.Elapsed; string buildTimeText = string.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); _output.WriteLine("Build time: " + buildTimeText); return(exitCode); } catch (Exception e) { _output.WriteLine("ERROR: " + e.Message); return(-1); } }