В настоящее время я новичок в использовании фонового рабочего и реализовал простой скрипт обновления для своего процесса. Фоновый рабочий запускает мой процесс - python скрипт, веб-драйвер, который запускает Google, затем "driver.quits ()" (где процесс считается завершенным).
Фоновый рабочий подключен к кнопке, он извлекает каталог полного пути для моего python скрипта из моего столбца datagridview "PD" и использует путь для запуска процесса под моим фоновым рабочим. В моем datagridview есть несколько строк с несколькими путями для дублирования сценариев python. Для одновременного запуска всех этих python файлов (строк) я использую (пример 1): (который проходит через все мои строки, извлекает значение ячейки python полного пути к файлу для строки и использует путь для запуска в процессе в фоновом режиме). Здесь я могу очень легко запускать все мои файлы (строки) одним нажатием кнопки ... Однако, поскольку я вручную выбираю каждую из моих строк в моем скрипте, фоновый рабочий запускает каждую конкретную c python файл / путь (строка), хотя не может обновить значение каждой ячейки строки «StatusR» по завершении. Фоновый рабочий обновляет столбец «StatusR», который представляет собой простой столбец текстового поля ... Когда каждый процесс завершается, я sh для фонового рабочего, чтобы выбрать строку, к которой принадлежит указанный c процесс, и обновить текст метки на «Завершено». В настоящий момент фоновый исполнитель проходит через все мои строки, обновляет текст в каждой строке в столбце «StatusR» до «выполняется» из «ожидания» (по умолчанию) и обновляет одну строку значение ячейки с "complete" (последняя выбранная строка сценарием, совпадение путем вызова "для каждой строки"), когда все драйверы завершены sh запущены. Был бы признателен за помощь :)
НА КНОПКЕ (python скрипт запускается на строку): https://gyazo.com/05e7252a09ef508bc7ebaed753c63469
РЕЗУЛЬТАТ (после выхода скрипта): https://gyazo.com/a3ba0b7872074d83462797dabdf9cab2
Вручную выбрать все строки (позволяет мне просто запускать каждую строку, значение пути как процесс сразу в моем datagridview): ПРИМЕР 1
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[3].Value.ToString().Equals("3")) #this value is set to 3 for all of my columns to easily select them all --constant :)
{
dataGridView1.ClearSelection();
row.Selected = true;
#script to read python path and execute background worker with respective path (datagridview column value)
Фоновый рабочий:
...............
var worker = new BackgroundWorker();
worker.WorkerReportsProgress = false;
worker.WorkerSupportsCancellation = false;
dataGridView1.SelectedRows[0].Cells[8].Value = "Running";
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
var p = new System.Diagnostics.Process();
p.StartInfo.FileName = "C://Users//Win_10//AppData//Local//Programs//Python//Python38-32//python.exe";
p.StartInfo.Arguments = "C://Users//Win_10//AppData//Local//Programs//Python//Python38-32//harrypotterbackground.py";
p.Start();
p.WaitForExit();
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dataGridView1.ClearSelection();
int inde = dataGridView1.CurrentRow.Index;
dataGridView1.Rows[inde].Selected = true;
dataGridView1.CurrentRow.Cells[8].Value = "idle";
}
}