private void StartExecutingGCodeThread() { var timeStart = DateTime.Now; _machine.EnqueueCommands = true; try { if (_settings.IgnoreLimitsDuringExecution) { _machine.IgnoreLimitSwitches(true); } _machine.EnableStepperDrivers(true); var parser = new GCodeParser(); parser.OnProgressNotify += new GCodeParser.OnProgressNotifyEventHandler(GCodeParser_OnProgressNotify); Invoke(new MethodInvoker(() => { parser.WorkspaceOffset = ((OffsetType)cboWCS.SelectedItem).GCodeIdentifier; parser.ToolOffset = ((OffsetType)cboToolOffsets.SelectedItem).GCodeIdentifier; parser.ToolLengthCompensation = chkToolLengthOffset.Checked; })); parser.ExecuteCode(txtGCode.Lines.ToList()); _machine.EnableStepperDrivers(false); if (_settings.IgnoreLimitsDuringExecution) { _machine.IgnoreLimitSwitches(false); } } finally { _machine.EnqueueCommands = false; } _machine.RunQueuedCommands(); _executingGCode = false; var timeElapsed = DateTime.Now.Subtract(timeStart); Invoke(new MethodInvoker(() => { EnableOrDisableMotionFunctions(); toolStripStatusLabel.Text = ""; LogText("Program run time: " + timeElapsed.ToString()); SetMachineWorkingOffset(); // Restore to UI defined offsets })); }