PDA

View Full Version : سوال: روش استفاده از Progress Bar با Thread و Backgroundworker



jmfnima
دوشنبه 10 آذر 1393, 12:23 عصر
با سلام به دوستان
توی برنامه من کاربر با انتخاب یک فایل اکسل حدود 3000 رکورد رو در دیتابیس ثبت می کنه با توجه به اینکه زمان ثبت اطلاعات در دیتابیس حدود 2 الی 3 دقیقه زمان نیاز داره میخوام در حین این زمان یک فرم نشون داده بشه و که روی اون یک Progress Bar باشه و درصد ثبت اطلاعات در دیتابیس رو به من نشون بده .

در مورد Theard و Backgroundworker مطالب و سورس های زیادی پیدا کردم ولی هیچ کدوم یک مثال کامل و واقعی و بدردبخور رو نداشتن.

اگه از دوستان کسی در این زمینه سورسی داره برام بزاره . ممنون

از گذاشتن آموزش و مطالب آموزشی هم اگه زحمتی نیست بی خیال بشین .

s.karim
دوشنبه 10 آذر 1393, 13:50 عصر
private void btnReport_Click(System.Object sender, System.EventArgs e)
{
try {
this.btnReport.Enabled = false;
frmLoading.Show();
this.Cursor = Cursors.WaitCursor;


if (BackgroundWorker1.IsBusy != true) {
BackgroundWorker1.RunWorkerAsync();
}


} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}




private void BackgroundWorker1_DoWork(System.Object sender, System.ComponentModel.DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker)sender;
int i = 0;


for (i = 1; i <= 10; i++) {
if ((worker.CancellationPending == true)) {
e.Cancel = true;
break; // TODO: might not be correct. Was : Exit For
} else {
System.Threading.Thread.Sleep(200);
worker.ReportProgress(i * 10);
}
}


if (dgvReport.InvokeRequired) {
dgvReport.Invoke(new MethodInvoker(Search));
}


}






private void BackgroundWorker1_RunWorkerCompleted(System.Object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
this.btnReport.Enabled = true;
frmLoading.Hide();
this.Cursor = Cursors.Default;


}




private void BackgroundWorker1_ProgressChanged(System.Object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
this.ProgressBar1.Value = e.ProgressPercentage;


}

jmfnima
چهارشنبه 12 آذر 1393, 23:14 عصر
با سلام و تشکر از شما دوست عزیز
این کدی که گذاشتی اونی نیست که من دنبالش می گردم من میخوام درصد پیشرفت ثبت اطلاعات در دیتابیس روی یک پروگرس بار نمایش داده بشه و هر چه تعداد رکورد ثبت میشه با عدد و درصد روی پروگرس بار نمایش داده بشه.