تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
بوتن ايقاف BackgroundWorker
#9
الأخ Rabeh

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 ObjectAs EventArgsHandles Button2.Click
        StopAction
()
 
   End Sub

    Private Sub Button1_Click
(sender As ObjectAs EventArgsHandles Button1.Click
        DoAction
(Me)
 
   End Sub

    Private Sub DoAction
(ctrl As Controlcriteria As Boolean)
 
       If criteria Then
            clock
.Enabled True
            clock
.Start()
 
           AddHandler clock.TickAddressOf Clock_Action
        End 
If
 
   End Sub

    Private Sub DoAction
(ctrl As Control)
 
       DoAction(ctrltrue)
 
   End Sub

    Private Sub Clock_Action
(sender As ObjectAs 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.TickAddressOf Clock_Action
        If clock IsNot Nothing Then
            clock
.Dispose()
 
           clock Nothing
        End 
If
 
   End Sub


End 
Class 


اخيرا في الحدث ForrmClosing عليك بعمل Dispsoe للتايمر و لقد كتبت لك شكل الروتين Dispose في الكود اعلاه

او ممكن بدلا من استخدام تايمر بهذا الاسلوب
تستطيع ان تضيف تايمر عادي بلا منه للفورم
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 21-06-17, 12:15 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة silverlight - 22-06-17, 03:51 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 22-06-17, 04:32 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة سعود - 22-06-17, 04:55 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 22-06-17, 05:39 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة سعود - 22-06-17, 05:52 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 22-06-17, 06:40 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة سعود - 22-06-17, 06:44 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة silverlight - 22-06-17, 06:59 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 22-06-17, 12:00 PM
RE: بوتن ايقاف BackgroundWorker - بواسطة silverlight - 23-06-17, 02:51 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 23-06-17, 04:04 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة silverlight - 23-06-17, 06:00 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 23-06-17, 06:23 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة silverlight - 23-06-17, 07:14 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 23-06-17, 09:17 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة WL_2000 - 23-06-17, 09:41 AM
RE: بوتن ايقاف BackgroundWorker - بواسطة rabeh.ram - 23-06-17, 11:39 AM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم