كيفية إنشاء أداة timer احترافية


في هذا الموضوع سوف نتعلم كيفية إنشاء أداة timer
احترافية أكثر من أداة timer الموجودة في vs

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


نفتح مشروع جديد ونضيف كلاس جديد ونسميه 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 تقريبا تساوت السرعتان

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

ساعة رقمية بدون اداة timer

في هذا المقال سوف اعرض لكم كود لإنشاء ساعة رقمية بدون أداة timer 


Vb.net كود :
   Dim mythr As Threading.Thread
    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        mythr 
= New Threading.Thread(AddressOf MyTimerSub)
 
       mythr.Start()
 
   End Sub
    Function MyTimerSub
()
 
       Do
            Threading
.Thread.Sleep(1000)
 
           Lbl_Time.Text Now.ToString("hh:mm:ss tt")
 
       Loop
    End 
Function
 
   Private Sub Form1_FormClosing(sender As ObjectAs FormClosingEventArgsHandles Me.FormClosing
        mythr
.Abort()
 
   End Sub