في هذا الموضوع سوف نتعلم كيفية إنشاء أداة 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 Object, e As EventArgs) Handles 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 Object, e As FormClosingEventArgs) Handles Me.FormClosing
mythr.Abort()
End Sub