22-06-17, 06:59 AM
(آخر تعديل لهذه المشاركة : 22-06-17, 07:10 AM {2} بواسطة silverlight.)
الأخ Rabeh
backgroundworker من عائلة Threading
وهو لكي يعمل يحتاج الي تايمر لذلك ستجد ان مشكلتك هي ايقاف التايمر
دعني اوضح لك الأمر بمثال بسيط جدا مختلف عن Backgroundworker
و لكنه مشابه تماما لما يقوم به Backgroundworker
لنفترض جدلا انك تريد تغيير خلفية لون الفورم الي اللون الأسود مثلا وذلك من خلال تايمر
انت هنا تقوم بإضافة التايمر ثم تقوم بتشغيله ومن خلاله تقوم بتغيير لون خلفية الفورم بأي لون تحدده
لكن حينما تريد ان تلغي العملية بعد تنفيذها هنا عليك ان تقوم بإيقاف التايمر و تعيد كل شئ الي طبيعته الاصلية
لو فكرت في الأمر قليلا ستكتشف انك تستطيع الاستغناء عن backgroundworker تماما و تستبدله بتايمر و اعتقد سكون اسهل لك التعامل مع التايمر
الكود التالي ه تنفيذ عملي لما قلته لك
افتح مشروع اضف له 2 باتون احدهما سيتكفل بتشغل التايمر و الاخر سيقوم بإيقاف التايمر
اخيرا في الحدث ForrmClosing عليك بعمل Dispsoe للتايمر و لقد كتبت لك شكل الروتين Dispose في الكود اعلاه
او ممكن بدلا من استخدام تايمر بهذا الاسلوب
تستطيع ان تضيف تايمر عادي بلا منه للفورم
backgroundworker من عائلة Threading
وهو لكي يعمل يحتاج الي تايمر لذلك ستجد ان مشكلتك هي ايقاف التايمر
دعني اوضح لك الأمر بمثال بسيط جدا مختلف عن Backgroundworker
و لكنه مشابه تماما لما يقوم به Backgroundworker
لنفترض جدلا انك تريد تغيير خلفية لون الفورم الي اللون الأسود مثلا وذلك من خلال تايمر
انت هنا تقوم بإضافة التايمر ثم تقوم بتشغيله ومن خلاله تقوم بتغيير لون خلفية الفورم بأي لون تحدده
لكن حينما تريد ان تلغي العملية بعد تنفيذها هنا عليك ان تقوم بإيقاف التايمر و تعيد كل شئ الي طبيعته الاصلية
لو فكرت في الأمر قليلا ستكتشف انك تستطيع الاستغناء عن backgroundworker تماما و تستبدله بتايمر و اعتقد سكون اسهل لك التعامل مع التايمر
الكود التالي ه تنفيذ عملي لما قلته لك
افتح مشروع اضف له 2 باتون احدهما سيتكفل بتشغل التايمر و الاخر سيقوم بإيقاف التايمر
PHP كود :
Public Class Form1
Private clock As Timer = New Timer
Private clr As Color = Color.Black
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
StopAction()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DoAction(Me)
End Sub
Private Sub DoAction(ctrl As Control, criteria As Boolean)
If criteria Then
clock.Enabled = True
clock.Start()
AddHandler clock.Tick, AddressOf Clock_Action
End If
End Sub
Private Sub DoAction(ctrl As Control)
DoAction(ctrl, true)
End Sub
Private Sub Clock_Action(sender As Object, e As EventArgs)
Me.BackColor = clr
End Sub
Private Sub StopAction()
clock.Stop()
clock.Enabled = False
Me.clr = Color.Black
Me.BackColor = SystemColors.Control
End Sub
Private Sub DisposeClock()
If clock.Enabled = True Then
clock.Enabled = False
End If
clock.Stop()
RemoveHandler clock.Tick, AddressOf Clock_Action
If clock IsNot Nothing Then
clock.Dispose()
clock = Nothing
End If
End Sub
End Class
اخيرا في الحدث ForrmClosing عليك بعمل Dispsoe للتايمر و لقد كتبت لك شكل الروتين Dispose في الكود اعلاه
او ممكن بدلا من استخدام تايمر بهذا الاسلوب
تستطيع ان تضيف تايمر عادي بلا منه للفورم

