17-10-14, 07:08 AM
(آخر تعديل لهذه المشاركة : 17-10-14, 07:11 AM {2} بواسطة الشاكي لله.)
السلام عليكم
الطريقة الصحيحة لايقاف Thread او حتى BackgroundWorker هي باستخدام كائن يسمى ManualRestEvent وليست باستعمال الloop مع الSleep
هذا المثال التالي يشرح كيفية عمل ذلك :
البرنامج :-
الطريقة الصحيحة لايقاف Thread او حتى BackgroundWorker هي باستخدام كائن يسمى ManualRestEvent وليست باستعمال الloop مع الSleep
هذا المثال التالي يشرح كيفية عمل ذلك :
كود :
Private mre As New ManualResetEvent(True)
Private Sub Form1_Load(sender As Object, e As EventArgs)
Control.CheckForIllegalCrossThreadCalls = False
backgroundWorker1.RunWorkerAsync()
End Sub
Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
'....
'....
'....
'....
For i As Integer = 0 To 9999999
mre.WaitOne()
' الكود اعلاه سيقوم بايقاف هذا الاجراء عندما يتم اعطاءه اشارة سلبية من اجراء اخر
'الاشارة اما ان تكون ايجابية او سلبية
'السلبية ستعني ايقاف هذا الاجراء
'Reset() ويتم اعطاء الاشارة السلبية بواسطة الدالة
'Set() ويتم اعطاء الاشارة الايجابية التي ستقوم باكمال هذا الاجراء بواسطة الدالة
label1.Text = i.ToString()
Next
'....
'....
'....
'....
End Sub
Private Sub PauseButton_Click(sender As Object, e As EventArgs)
mre.Reset()
'اعطاء اشارة سلبية
End Sub
Private Sub ResumeButton_Click(sender As Object, e As EventArgs)
mre.Set()
'اعطاء اشارة ايجابية
End Subالبرنامج :-
هذي هي الطريقة الصحيحة التي لاترهق المعالج وتقوم بوظيفتها على اكمل وجه
تحياتي

