كثير من المبرمجين لا
يعرفون الطريقة الصحيحة للتعامل مع backgroundWorker سأقوم بشرح هذا الامر مع الاستعانة بمثال
قم بعمل مشروع جديد
بالفيجوال بيسك واضف اليه backgroundWorker وزرين و2 ليبل
فى حدث تحميل الفورم
1.
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
2.
Button1.Text = "Start"
3.
Button2.Text = "Cancel"
4.
Label1.Text = ""
5.
Label2.Text = ""
6.
End Sub
فى حدث الضغط على زر button1
Button1.Enabled = False
Button2.Enabled = True
هذه الخصائص يتم وضعها true فى وقت التصميم قبل استدعاء RunWorkerAsync
للتأكد ان backgroundWorker يدعم Cancellation and
reporting progress
BackgroundWorker1.WorkerSupportsCancellation
= True
BackgroundWorker1.WorkerReportsProgress
= True
8. استدع هذه الطريقة للبدء
BackgroundWorker1.RunWorkerAsync()
فى حدث الضغط على button2
للايقاف عليك باستدعاء هذه الطريقة
Button2.Enabled = False
BackgroundWorker1.CancelAsync()
فى حدث dowork
Const Max As Integer = 1000
For i = 1 To Max
تم وضع sleep لمحاكاة
الوقت
Threading.Thread.Sleep(100)
تقرير التقدم
BackgroundWorker1.ReportProgress(CInt(100 * i / Max), "Running..."
& i.ToString)
التحقق من هل قام المستخدم بالايقاف وفى حالة
الايقاف الخروج من loop
If BackgroundWorker1.CancellationPending Then
BackgroundWorker1.ReportProgress(CInt(100 * i / Max), "Cancelling...")
Exit For
End If
Next
اى اكواد خاصة بالتنظيف توضع هنا للتأكد من اغلاق
اى مصدر قبل انهاء الدالة
وضع e.cancel = true لاخبار runworkercopleted انك قمت بالانهاء
If BackgroundWorker1.CancellationPending Then
e.Cancel = True
BackgroundWorker1.ReportProgress(100, "Cancelled.")
End If
فى حدث ProgressChanged
هذا الحدث يتم اطلاقه عندما نقوم باستدعاء الدالة reportprogress من داخل حدث dowork
هنا
يتم وضع التغييرات التى تطرأ واسنادها لل labels
Label1.Text = CType(e.UserState, String)
Label2.Text = e.ProgressPercentage.ToString & "% complete."
فى حدث RunWorkerCompleted
هذا الحدث يتم
اطلاقه عندما يتم انهاء backgroundworker باى طريقة حتى لو بالضغط على زر الالغاءاو
لاى خطأ
If e.Error IsNot Nothing Then
هل انتهى backgroundWORKER بخطأ
MessageBox.Show(e.Error.Message)
Label1.Text = "Error occurred!"
ElseIf e.Cancelled Then
فى حالة اغلاقه
MessageBox.Show("Task
cancelled!")
Label1.Text = "Task
Cancelled!"
Else
فى حالة الانتهاء الطبيعى
MessageBox.Show("Task
completed!")
Label1.Text = "Error
completed!"
End If
Button1.Enabled = True
Button2.Enabled = False
End Sub
The Best No Deposit Casinos - DrMCD
ردحذفThe Best No Deposit Casinos · 광명 출장마사지 1. BetMGM Casino - $50 충청남도 출장샵 No Deposit Bonus · 동두천 출장안마 2. 888 Casino - $50 Free $25 No Deposit Bonus · 3. 논산 출장안마 Caesars Casino 남원 출장마사지 - $50 Free