CNCGUI.MainForm.backgroundWorker_DoWork C# (CSharp) 메소드

backgroundWorker_DoWork() 개인적인 메소드

private backgroundWorker_DoWork ( object sender, DoWorkEventArgs e ) : void
sender object
e DoWorkEventArgs
리턴 void
        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);
        }