private async void CodeBoxRunButton_Click(object sender, RoutedEventArgs e) { Encoding encoding = Encoding.UTF8; if (File.Exists(m.CodeFile)) { encoding = FileHelper.DetectTextEncoding(m.CodeFile); } using (StreamWriter writer = new StreamWriter(m.CodeFile, false, encoding)) { writer.Write(m.CodeBox_Input); writer.Close(); } if (Engine.WorkingLock == 0) // Start Build { Interlocked.Increment(ref Engine.WorkingLock); Project project = m.CodeBox_CurrentProject; Script p = project.LoadScriptMonkeyPatch(m.CodeFile); Logger logger = null; SettingViewModel setting = null; MainViewModel mainModel = null; Application.Current.Dispatcher.Invoke(() => { MainWindow w = (Application.Current.MainWindow as MainWindow); logger = w.Logger; setting = w.Setting; mainModel = w.Model; }); mainModel.SwitchNormalBuildInterface = false; mainModel.WorkInProgress = true; EngineState s = new EngineState(p.Project, logger, mainModel, EngineMode.RunMainAndOne, p); s.SetOption(setting); Engine.WorkingEngine = new Engine(s); await Engine.WorkingEngine.Run($"CodeBox - {project.ProjectName}"); mainModel.WorkInProgress = false; mainModel.SwitchNormalBuildInterface = true; Application.Current.Dispatcher.Invoke(() => { MainWindow w = Application.Current.MainWindow as MainWindow; w.DrawScript(w.CurMainTree.Script); if (w.Setting.General_ShowLogAfterBuild && LogWindow.Count == 0) { // Open BuildLogWindow w.LogDialog = new LogWindow(1); w.LogDialog.Show(); } }); Engine.WorkingEngine = null; Interlocked.Decrement(ref Engine.WorkingLock); } else { MessageBox.Show("Engine is already running", "Build Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
private static async void RunOneSection(SectionAddress addr, string logMsg, bool hideProgress) { if (Engine.WorkingLock == 0) { Interlocked.Increment(ref Engine.WorkingLock); Logger logger = null; SettingViewModel setting = null; MainViewModel mainModel = null; Application.Current.Dispatcher.Invoke(() => { MainWindow w = Application.Current.MainWindow as MainWindow; logger = w.Logger; mainModel = w.Model; setting = w.Setting; // Populate BuildTree if (!hideProgress) { w.Model.BuildTree.Children.Clear(); w.PopulateOneTreeView(addr.Script, w.Model.BuildTree, w.Model.BuildTree); w.CurBuildTree = null; } }); mainModel.WorkInProgress = true; EngineState s = new EngineState(addr.Script.Project, logger, mainModel, EngineMode.RunMainAndOne, addr.Script, addr.Section.SectionName); s.SetOption(setting); s.DisableLogger = setting.Log_DisableInInterface; Engine.WorkingEngine = new Engine(s); // Build Start, Switch to Build View if (!hideProgress) { mainModel.SwitchNormalBuildInterface = false; } // Run long buildId = await Engine.WorkingEngine.Run(logMsg); // Build Ended, Switch to Normal View if (!hideProgress) { mainModel.SwitchNormalBuildInterface = true; } // Turn off ProgressRing mainModel.WorkInProgress = false; Engine.WorkingEngine = null; Interlocked.Decrement(ref Engine.WorkingLock); if (!hideProgress) { Application.Current.Dispatcher.Invoke(() => { MainWindow w = Application.Current.MainWindow as MainWindow; w.DrawScript(w.CurMainTree.Script); }); } } }