private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
List<string> responses = new List<string>();
object[] param = (object[])e.Argument;
bool step_mode = (bool)param[0];
List<GCodeListViewItem> gcodes = (List<GCodeListViewItem>)param[1];
BackgroundWorker worker = (BackgroundWorker)sender;
e.Result = E_RESPONSE.E_OK;
worker_progress = true;
bool check_bp = false;
while (GCodes.CurrentLine < gcodes.Count)
{
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
if (GCodes.CurrentLine == GCodes.StopLine)
break;
GCodeListViewItem gcodeItem = gcodes[GCodes.CurrentLine];
string gcode = gcodeItem.SubItems[1].Text;
if (check_bp && gcodeItem.Breakpoint)
break;
check_bp = true;
int idx;
// Check if we need to override and F command. This is a little rude, we just replaces first F in line...
if (overrideSpeedChkbox.Checked && (idx = gcode.ToLower().IndexOf("f", StringComparison.InvariantCultureIgnoreCase)) >= 0)
{
// Yea, this can be done a lot better.
idx++;
if (idx < gcode.Length)
{
string firstPart = gcode.Substring(0, idx);
string lastPart = gcode.Substring(idx);
lastPart = Regex.Replace(lastPart, "^\\d+(.\\d*)", speedOverrideNumber.Value.ToString());
gcode = firstPart + lastPart;
}
}
if (SendCommand(gcode, responses) != E_RESPONSE.E_OK)
{
if (!IgnoreGCodeErrors.Checked)
{
e.Result = E_RESPONSE.E_ERROR;
break;
}
}
GCodes.CurrentLine++;
if (step_mode)
{
break;
}
else if (worker_progress)
{
worker_progress = false;
worker.ReportProgress(0, false);
}
}
GCodes.StopLine = -1;
worker.ReportProgress(0, true);
}