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

طبعا كلنا نعلم ان التايمر يهنج البرنامج

خصوصا لو البرنامج كبير

فكيف يمكن الاستغناء عن التايمر

واستخدام شئ بديل

او فنكشن بديل يقوم بالمهمة بدل التايمر

مثال هذا الكود

كود :
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

وجرب هذا ايضا ولم ينفع



فهل من مساعد ؟
الرد
تم الشكر بواسطة:
#2
ماهو هدفك من استخدام التايمر؟
وضح بهدوء ماذا تريد أن تفعل تحديدا
الرد
تم الشكر بواسطة: الماجيك مسعد
#3
هذا ما اريد
اقرا الكود

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

الكود يحسب ويعرض مدة تشغيل البرنامج بالثانية والدقيقة والساعة

ولكن اريد تنفيذه بطريقة او باداة غير التايمر
لان البرنامج كبير ويقوم بتشنج البرنامج وتهنيجه
الرد
تم الشكر بواسطة:
#4
طالما تريد تحديد مدة زمنية لشئ معين سواء فترة تشغيل برنامج او زمن تنفيذ كود معين الأفضل لك ان تستخدم 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 ObjectAs EventArgsHandles MyBase.Load
        startData 
DateTime.Now

    End Sub

    Private Sub Form1_FormClosing
(sender As ObjectAs FormClosingEventArgsHandles 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.Hoursts.Minutests.Secondsts.Milliseconds 10)
 
       MessageBox.Show(result)
 
   End Sub
End 
Class 
الرد
تم الشكر بواسطة: العزابي
#5
(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 ObjectAs EventArgsHandles MyBase.Load
        startData 
DateTime.Now

    End Sub

    Private Sub Form1_FormClosing
(sender As ObjectAs FormClosingEventArgsHandles 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.Hoursts.Minutests.Secondsts.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

كنت اعتقد ممكن عمل فنكشن مثلا التايمر يعمل كل وقت معين باستمرار مثل التايمر ويكون افضل

ولكن للاسف
الرد
تم الشكر بواسطة:
#6
الفكرة التي تريدها ممكنة و لكنها تتطلب كتابة كلاس لذلك
وهنا عليك ان تخلط بين الفكرتين تستخدم Stopwatch.Ellapsed و تجمعها مع StartDate
الرد
تم الشكر بواسطة: الماجيك مسعد
#7
(07-12-16, 02:01 AM)silverlight كتب : الفكرة التي تريدها ممكنة و لكنها تتطلب كتابة كلاس لذلك
وهنا عليك ان تخلط بين الفكرتين تستخدم Stopwatch.Ellapsed و تجمعها مع StartDate

فقط كيف يمكن عمل فنكشن او كلاش يؤدى اداى التايمر مثلا تنفيذ مهمة كل وقت معين على حسب تحديد المستخدم وطبعا بدون تهنيج
الرد
تم الشكر بواسطة:
#8
افتح مشروع و ضع Label علي الفورم و نفذ الكود التالي


PHP كود :
Public Class Form1

    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles 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
.TickSub(oarg)
 
                                      Dim ts As TimeSpan = If(periodsw.Elapsed)
 
                                      ctrl.Text String.Format("{0:00}:{1:00}:{2:00}.{3:00}"ts.Hoursts.Minutests.Secondsts.Milliseconds 10)
 
                                  End Sub
        End 
If

 
   End Sub

End 
Class 


انا ليه قلت انت تحتاج كلاس
السبب حتي تستطيع ان تتحكم في التايمر حينما تريد بحيث تتمكن من إيقاف التايمر أو التخلص منه
لكن و بما انك تحتاج لكود وخلاص اعتقد الكود اعلاه سوف يكفي لحل مشكلتك
الرد
تم الشكر بواسطة: zinom


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] هل يوجد مشغل بديل لي vlc يقوم بتشغيل روابط بث مباشرة ميدو الفنان 1 62 16-09-20, 11:49 PM
آخر رد: ميدو الفنان
  [سؤال] هل يمكن تحويل مشروع الي ملف DLL saleh101 1 171 14-08-20, 02:14 AM
آخر رد: asemshahen5
  هل يمكن اضافة اكثر من tag فى ال button mostafa nada 11 703 06-08-20, 12:38 AM
آخر رد: mostafa nada
  [سؤال] هل يمكن عمل Trigger في قواعد بيانات Access + فيجوال بيسك محمد العامر 2 272 28-07-20, 01:45 AM
آخر رد: محمد العامر
  هل يمكن تحميل اسم قاعدة البيانات في جدول DataGridView أو لست بوكس المهنا 2 282 26-07-20, 11:46 PM
آخر رد: المهنا
  [سؤال] كيف يمكن نسخ ملف من أى مكان بالجهاز الى بارتشن C xprogrammer 0 144 20-07-20, 03:16 AM
آخر رد: xprogrammer
  هل يمكن حفظ الPrint Document بصيغة Pdf؟ Hazem1 2 265 06-07-20, 10:33 PM
آخر رد: Hazem1
  هل يمكن تحويل Print Document إلى PDF ؟ Hazem1 1 206 04-07-20, 11:36 AM
آخر رد: Hazem1
  [VB.NET] كيف يمكن عرض معلومات JSON في Combobox فيجوال بيسك Sorax 1 319 14-06-20, 10:20 PM
آخر رد: kiki
  هل يمكن تحويل تطبيق من لغة الفيجوال بيسك إلى الأندرويد Hazem1 5 512 06-06-20, 11:57 PM
آخر رد: WaeLx

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


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