تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] تايمر جديد اسرع بأضعاف من التايمر العادي ؟!
#1
Lightbulb 
السلام عليكم ورحمة الله وبركاته



قبل قليل كنت اجرب شي وهو عمل تايمر عن طريق BackgroundWorker وتفاجئت عندما رأيت انه اسرع من التايمر العادي وحبيت اضع هذا المقال ان شاء الله يفيدكم , بالرغم ان كلامها نفس السرعة عند وضع [b]interval يساوي 1000 لكن ممكن وضع قيمة 0 للفئة الجديدة وهي اصلا اسرع عندما كلاهما 1 بكثير[/b]
 





اولآ سنقوم بعمل التايمر ثم نقارن بين السرعتين:


نفتح مشروع جديد ونضيف كلاس جديد ونسميه Mytimer





الان انسخ الكود الذي عملته وهو اداة تشبه التايمر الى الكلاس


كود :
Imports System.ComponentModel

Public Class MyTimer
   Inherits Component
   Private WithEvents Background As New BackgroundWorker _
   With {.WorkerSupportsCancellation = True}
   Event Tick(ByVal sender As Object, ByVal e As EventArgs)

   Private En As Boolean = False
   Property Enabled() As Boolean
       Get
           Return En
       End Get
       Set(ByVal value As Boolean)
           En = value
           If value = True Then
               If Not Background.IsBusy Then
                   Background.RunWorkerAsync()
               End If
           Else
               If Background.IsBusy Then
                   Background.CancelAsync()
               End If
           End If
       End Set
   End Property

   Private Intrvl As Integer = 100
   Property Interval() As Integer
       Get
           Return Intrvl
       End Get
       Set(ByVal value As Integer)
           Intrvl = value
       End Set
   End Property

   Public Sub Start()
       Enabled = True
   End Sub
   Public Sub _Stop()
       Enabled = False
   End Sub


   Private Sub Background_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Background.DoWork
       RaiseEvent Tick(Me, New EventArgs)
   End Sub

   Private Sub Background_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Background.RunWorkerCompleted
       wait(Interval)
       If Me.Enabled Then
           Background.RunWorkerAsync()
       End If

   End Sub

   Public Sub New()
       System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
   End Sub

   Private Sub wait(ByVal interval As Integer)
       On Error Resume Next
       Dim sw As New Stopwatch
       sw.Start()
       Do While sw.ElapsedMilliseconds < interval
           Application.DoEvents()
       Loop
       sw.Stop()
   End Sub
End Class

واعمل Build للمشروع ستلاحظ ظهور الاداة كما في الصورة







نضيف الاداة على الفورم ونضيف Timer العادي و2 ليست بوكس وزر بوتون و2 ليبل كما في الصورة
ونختار لكلا التايمرين interval=1




الان نضع هذا الكود في الفورم

كود :
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Timer1.Start()
       MyTimer1.Start()
   End Sub

   Dim a As Integer = 0
   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       If a = 400 Then
           Timer1.Enabled = False
           Label2.Text = "Timer: 1"
       End If
       ListBox2.Items.Add(a)
       a += 1
   End Sub
   Dim i As Integer = 0
   Private Sub MyTimer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyTimer1.Tick
       If i = 400 Then
           MyTimer1.Enabled = False
           Label1.Text = "MyTimer: 1"
       End If
       ListBox1.Items.Add(i)
       i += 1
   End Sub




وكما تلاحظون تعمدت تشغيل التايمر العادي قبل الكلاس الذي انشأته لكن ستلاحظون فرق كبير بالسرعة حيث تقريبا عندما وضعت Interval للكلاس يساوي 15 تقريبا تساوت السرعتان

ان شاء الله يكون موضوع مفيد للبعض وتحياتي
الرد }}}


الردود في هذا الموضوع
تايمر جديد اسرع بأضعاف من التايمر العادي ؟! - بواسطة 3booody - 21-11-19, 11:52 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 9 10,533 19-07-25, 05:59 PM
آخر رد: Mostafa25
  Private Text Encryption -خدمة للمبرمجين في جديد عالم التشفير- RaggiTech 1 3,788 07-05-20, 05:48 AM
آخر رد: سعود
  [درس فيديو] اقو و اسرع برنمج صنع بروكس 2020 محمد ايمن 2 2,129 16-03-20, 12:50 AM
آخر رد: محمد ايمن
  (عنوان معدل) عمل شاشة البداية بدون كود ولا تايمر ولا اى حاجه mero5000 5 4,884 23-08-15, 12:50 AM
آخر رد: lolo queen
  كونترول جديد من مايكروسوفت MsChart Control RaggiTech 1 3,403 05-10-12, 03:04 PM
آخر رد: RaggiTech
  نوع بيانات جديد (تاريخ) RaggiTech 0 2,253 05-10-12, 03:34 AM
آخر رد: RaggiTech
  جديد 2010- اكتب الكود الذي سيستخدم فئتك ثم قم بإنشائها RaggiTech 0 2,440 03-10-12, 12:27 PM
آخر رد: RaggiTech
  الطرائق المُوَسِّعة Extension Methods من جديد VB2008 RaggiTech 1 2,241 02-10-12, 07:31 PM
آخر رد: RaggiTech
  الاستدلال المحلي على النوع Local Type Inference من جديد VB2008 RaggiTech 0 2,197 02-10-12, 09:43 AM
آخر رد: RaggiTech
  الأنواع المجهولة Anonymous Types، من جديد VB 2008 RaggiTech 0 2,056 02-10-12, 08:57 AM
آخر رد: RaggiTech

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


يقوم بقرائة الموضوع: