У меня есть приложение Windows Form, которое включает две формы.Дочерняя форма используется для экспорта данных в CSV-файлы и использует фоновый рабочий для записи файла.Пока это происходит, у меня есть скрытая форма.Родительская форма все еще активна, пока работает фоновый работник, поэтому пользователь может выйти из приложения, даже когда фоновый работник пишет файлы.В родительской форме я добавил обработчик событий FormClosing, чтобы запросить у пользователя, работает ли фоновый работник.Я сталкиваюсь с проблемой доступа к фоновому рабочему в родительской форме.Вот что я попробовал ...
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
ExportForm eForm = new ExportForm(GridView, TableName, GridProgressBar, ProgressLabel);
if (eForm.PartWorker.IsBusy == true)
MessageBox.Show("Busy");
}
Проблема в том, что он создает новый экземпляр дочерней формы, поэтому фоновый работник никогда не будет иметь значение true для своего атрибута IsBusy.Как я могу получить доступ к этому фоновому работнику в родительской форме, чтобы проверить, выполняется ли это условие.
Вот код для PartWorker BackgroundWorker ...
#region PartWorker Events
void PartWorker_DoWork(object sender, DoWorkEventArgs e)
{
GetSwitch();
int batchNum = 0;
bool done = false;
ProgressLabel.Visible = true;
while (!done)
{
for (int i = 1; i <= 100; i++)
{
Thread.Sleep(100);
PartWorker.ReportProgress(i);
}
done = Export.ExportPartition(SaveFile, DataTable, 50000, batchNum++);
}
}
void PartWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Progress.Style = ProgressBarStyle.Blocks;
Progress.Value = e.ProgressPercentage;
//May want to put the file name that is being written here.
ProgressLabel.Text = "Writing File: " + e.ProgressPercentage.ToString() +"% Complete";
}
void PartWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Progress.Value = 100;
ProgressLabel.Visible = false;
Progress.Visible = false;
MessageBox.Show("Files sucessfully created!", "Files Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
PartWorker.Dispose();
this.Close();
}
#endregion