السلام عليكم
طبعا كلنا نعلم ان التايمر يهنج البرنامج
خصوصا لو البرنامج كبير
فكيف يمكن الاستغناء عن التايمر
واستخدام شئ بديل
او فنكشن بديل يقوم بالمهمة بدل التايمر
مثال هذا الكود
كود :
Dim timercount As Integer = 0
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
timercount = timercount + 1
Dim Hrs As Integer
Dim Min As Integer
Dim Sec As Integer
Dim x = timercount.ToString
Sec = x Mod 60
Min = ((x - Sec) / 60) Mod 60
Hrs = ((x - (Sec + (Min * 60))) / 3600) Mod 60
txtRemaining.Text = String.Format("mg {0} hh, {1} mm, {2} ss", Hrs, Min, Sec)
End Sub
وجربت هذا الكود ولم ينفع
كود :
While True
Dim T As New Threading.Thread(sub()
timercount = timercount + 1
Dim x = timercount.ToString
Sec = x Mod 60
Min = ((x - Sec) / 60) Mod 60
Hrs = ((x - (Sec + (Min * 60))) / 3600) Mod 60
End Sub) With {.IsBackGround = true} : T.Start()
Thread.Sleep(Timer1.Interval)
End While
وجرب هذا ايضا ولم ينفع
فهل من مساعد ؟
ماهو هدفك من استخدام التايمر؟
وضح بهدوء ماذا تريد أن تفعل تحديدا
هذا ما اريد
اقرا الكود
Dim timercount As Integer = 0
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
timercount = timercount + 1
Dim Hrs As Integer
Dim Min As Integer
Dim Sec As Integer
Dim x = timercount.ToString
Sec = x Mod 60
Min = ((x - Sec) / 60) Mod 60
Hrs = ((x - (Sec + (Min * 60))) / 3600) Mod 60
txtRemaining.Text = String.Format("mg {0} hh, {1} mm, {2} ss", Hrs, Min, Sec)
End Sub
الكود يحسب ويعرض مدة تشغيل البرنامج بالثانية والدقيقة والساعة
ولكن اريد تنفيذه بطريقة او باداة غير التايمر
لان البرنامج كبير ويقوم بتشنج البرنامج وتهنيجه
طالما تريد تحديد مدة زمنية لشئ معين سواء فترة تشغيل برنامج او زمن تنفيذ كود معين الأفضل لك ان تستخدم StopWatch Class
وقي حالتك هنا تبدا StopWach عند بداية البرنامج ثم تقوم بإيقافه حين تريد و ليكن عند اغلاق الفورم مثلا
,وعلي ما اتذكر StopWatch كلاس به خاصية اسمها Elapsed وهي عبارة عن TimeSpan التي ممكن من خلالها حساب المدة الزمنية
الكود التالي سوف يعطيك فكرة عن الاستخدام
PHP كود :
Dim sw As New Stopwatch()
sw.Start()
' do somthing
sw.Stop()
Dim ts As TimeSpan = sw.Elapsed
Dim result As String = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
حل أخر و هنا يمكن الاستغناء عن التايمر و stopWatch أيضا
PHP كود :
Public Class Form1
Private startData As DateTime = Nothing
Private endDate As DateTime = Nothing
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
startData = DateTime.Now
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
endDate = DateTime.Now
Dim ts As TimeSpan = endDate - startData
Dim result As String = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
MessageBox.Show(result)
End Sub
End Class
(06-12-16, 04:32 AM)silverlight كتب : [ -> ]طالما تريد تحديد مدة زمنية لشئ معين سواء فترة تشغيل برنامج او زمن تنفيذ كود معين الأفضل لك ان تستخدم StopWatch Class
وقي حالتك هنا تبدا StopWach عند بداية البرنامج ثم تقوم بإيقافه حين تريد و ليكن عند اغلاق الفورم مثلا
,وعلي ما اتذكر StopWatch كلاس به خاصية اسمها Elapsed وهي عبارة عن TimeSpan التي ممكن من خلالها حساب المدة الزمنية
الكود التالي سوف يعطيك فكرة عن الاستخدام
PHP كود :
Dim sw As New Stopwatch()
sw.Start()
' do somthing
sw.Stop()
Dim ts As TimeSpan = sw.Elapsed
Dim result As String = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
حل أخر و هنا يمكن الاستغناء عن التايمر و stopWatch أيضا
PHP كود :
Public Class Form1
Private startData As DateTime = Nothing
Private endDate As DateTime = Nothing
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
startData = DateTime.Now
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
endDate = DateTime.Now
Dim ts As TimeSpan = endDate - startData
Dim result As String = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
MessageBox.Show(result)
End Sub
End Class
السلام عليكم
حلول رائعة ولكن فى مشكلة انى اريد عرض الوقت فى البرنامج وليس عند انهاء البرنامج
يعنى يظهر الوقت فى البرنامج
وتفضل الثوانى والدقائق والساعات شغالة فى البرنامج وتظهر فى التكست بوكس
قمت باستخدام هذا الكود
[VBASIC]
Dim timercount As Integer = 0
Dim Hrs, Min, Sec As Integer
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
Dim T As New Threading.Thread(Sub()
timercount = timercount + 1
Dim x = timercount.ToString
Sec = x Mod 60
Min = ((x - Sec) / 60) Mod 60
Hrs = ((x - (Sec + (Min * 60))) / 3600) Mod 60
End Sub) With {.IsBackground = True} : T.Start()
txtRemaining.Text = String.Format("mg {0} hh, {1} mm, {2} ss", Hrs, Min, Sec)
End Sub[/VBASIC]
الانترفال 1000
كنت اعتقد ممكن عمل فنكشن مثلا التايمر يعمل كل وقت معين باستمرار مثل التايمر ويكون افضل
ولكن للاسف
الفكرة التي تريدها ممكنة و لكنها تتطلب كتابة كلاس لذلك
وهنا عليك ان تخلط بين الفكرتين تستخدم Stopwatch.Ellapsed و تجمعها مع StartDate
(07-12-16, 02:01 AM)silverlight كتب : [ -> ]الفكرة التي تريدها ممكنة و لكنها تتطلب كتابة كلاس لذلك
وهنا عليك ان تخلط بين الفكرتين تستخدم Stopwatch.Ellapsed و تجمعها مع StartDate
فقط كيف يمكن عمل فنكشن او كلاش يؤدى اداى التايمر مثلا تنفيذ مهمة كل وقت معين على حسب تحديد المستخدم وطبعا بدون تهنيج
افتح مشروع و ضع Label علي الفورم و نفذ الكود التالي
PHP كود :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DoAction(Label1)
End Sub
Private Sub DoAction(ctrl As Control)
Dim sw As Stopwatch = Nothing
Dim period As TimeSpan?
Dim clock As Timer = Nothing
If ctrl IsNot Nothing AndAlso Not ctrl.IsDisposed Then
sw = New Stopwatch
sw.Start()
clock = New Timer
clock.Enabled = True
AddHandler clock.Tick, Sub(o, arg)
Dim ts As TimeSpan = If(period, sw.Elapsed)
ctrl.Text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10)
End Sub
End If
End Sub
End Class
انا ليه قلت انت تحتاج كلاس
السبب حتي تستطيع ان تتحكم في التايمر حينما تريد بحيث تتمكن من إيقاف التايمر أو التخلص منه
لكن و بما انك تحتاج لكود وخلاص اعتقد الكود اعلاه سوف يكفي لحل مشكلتك