View Full Version : ارسال Click چندین دکمه به Backgroundworkers
CSharpLovers
سه شنبه 11 بهمن 1401, 13:40 عصر
با درود و آروزی شادی برای همه دوستان.
ما در Background workers میایم و یک کار سنگین رو تعریف میکنیم که به صورت موازی انجام بشه و برنامه هنگ نکنه .
آیا میشه دستوراتی که در کلیک یک دکمه تعریف شده رو به Background workers فرستاد ؟
یعنی در یک فرم چندین دکمه داریم که ممکنه عملیاتشون سنگین باشه و کدهای مربوط به هر عملیات رو داخل دکمه بنویسیم و در backgroundWorker_DoWork مثلا با شرط تعریف کنیم که اگر از فلان دکمه پارامتری ارسال شد به صورت موازی انجام بده .
حالا با شرط یا هر روش استاندارد میشه این کار رو انجام داد یا برای هر دکمه باید یک backgroundWorker جداگانه تعریف بشه ؟
ممنون از دوستان عزیز
محمد رضا فاتحی
پنج شنبه 13 بهمن 1401, 11:10 صبح
با درود و آروزی شادی برای همه دوستان.
ما در Background workers میایم و یک کار سنگین رو تعریف میکنیم که به صورت موازی انجام بشه و برنامه هنگ نکنه .
آیا میشه دستوراتی که در کلیک یک دکمه تعریف شده رو به Background workers فرستاد ؟
یعنی در یک فرم چندین دکمه داریم که ممکنه عملیاتشون سنگین باشه و کدهای مربوط به هر عملیات رو داخل دکمه بنویسیم و در backgroundWorker_DoWork مثلا با شرط تعریف کنیم که اگر از فلان دکمه پارامتری ارسال شد به صورت موازی انجام بده .
حالا با شرط یا هر روش استاندارد میشه این کار رو انجام داد یا برای هر دکمه باید یک backgroundWorker جداگانه تعریف بشه ؟
ممنون از دوستان عزیز
سلام...می تونید یه متغیر تعریف کنید برای هر کلید و انو به عنوان پارامتر به backgroundWorker پاس بدین...و با یه سوئیچ-کیس اونو مدیریت کنید
CSharpLovers
پنج شنبه 13 بهمن 1401, 23:02 عصر
یک نمونه کد میگذارم ببینید صحیح هست این روش :
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 جدا گانه تعریف کنیم ؟
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.