یک نمونه کد میگذارم ببینید صحیح هست این روش :
int BGW_btnClick; // تعریف متغیر برای ارسال رویداد دکمه ها به بک گراند ورکر
کدهای دکمه اول -------------------------------
private void btn7_Click(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)
{
BGW_btnClick = 1;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();
frmWait frm = new frmWait();
frm.ShowDialog();
}
else return;
}
کدهای دکمه دوم -------------------------------
private void btnBn1_Click(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)
{
BGW_btnClick = 2;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();
frmWait frm = new frmWait();
frm.ShowDialog();
}
else return;
}
کدهای backgroundWorker1_DoWork -----------------------------------
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BindingSource bs = new BindingSource();
switch (BGW_btnClick)
{
case 1:
_PageSize = Convert.ToInt32(txtSearch3.Text);
bs.DataSource = _Data.GetListTblUnitPaging2(_PageNumber, _PageSize);
e.Result = bs;
break;
case 2:
if (txtSearch2.Text == "")
{
return;
}
bs.DataSource = _Data.GetUnitName(txtSearch2.Text);
e.Result = bs;
break;
case 3:
// HeaderTest();
bs.DataSource = _Data.GetDateTest(mskDate1.Text, mskDate2.Text);
e.Result = bs;
break;
}
}
کدهای backgroundWorker1_RunWorkerCompleted -------------------------------
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// DataGridView dgv = new DataGridView();
bs = e.Result as BindingSource;
bn1.BindingSource = bs;
bn2.BindingSource = bs;
dgv.DataSource = bs;
if (dgv.RowCount != 0)
{
dgv.Rows[dgv.RowCount - 1].Selected = true;
dgv.CurrentCell = dgv.Rows[dgv.RowCount - 1].Cells[0];
}
}
در مجموع آیا این روش مناسبی هست یا اینکه بیایم مثلا برای این سه عملیات سه تا backgroundWorker جدا گانه تعریف کنیم ؟