public ModelTraining StartTraining() { startTime = DateTime.Now.Ticks / 10000; // Clear GUI labelStatus.Text = "-"; ff.Name = cboxModelName.Text; ff.MaxEpochs = int.Parse(tboxEpochs.Text); labelStatus.Text = "Fetch training data..."; initBodyList = app.Dataset.BodyListEnabled(); labelStatus.Text = "Start training..."; ff.JobArgument = jobArgument; openJobs = parallelJobs; ff.JobIndex = 0; startStopButton1.IsRunning = true; ff.StopTraining(paraJobs); // stop potential old jobs. paraJobs.Clear(); Cursor.Current = Cursors.WaitCursor; var t = new Thread(() => { for (int jIdx = 0; jIdx < openJobs; jIdx++) { if (jIdx > 0) { System.Threading.Thread.Sleep(1000 * (jIdx + 2)); } ff.JobIndex = jIdx; paraJobs.Add(ff.StartTraining()); } }); t.Start(); while (!t.Join(50)) { Application.DoEvents(); } Cursor.Current = Cursors.Default; return(this); }