سؤال

ولدي ميزة على مدار الساعة في برنامج VB.NET الذي يعرض في وقت بما في ذلك ثواني. لدي حاليا جهاز توقيت الاقتراع باستمرار باستخدام الآن. لا بد لي من استطلاع ساعة النظام في كثير من الأحيان لأنني بحاجة إلى التحديث الثاني في تزامن مع ساعة النظام.

هل هناك أكثر مباشرة للوصول إلى الوقت فقط عندما تتغير ثواني؟

هل هناك طريقة أكثر كفاءة لكتابة هذا الرمز؟

إذا كنت بحاجة الى مزيد من المعلومات اسمحوا لي أن أعرف.

هل كانت مفيدة؟

المحلول

لماذا لا تستخدم المكون الموقت؟ هذا يفترض أن كنت تستخدم واجهة المستخدم الرسومية وليس بناء الخدمة.

ويمكن استدعاء روتين تزامن ذلك إجراء الاقتراع للحصول على توقيت قريب جدا من الثواني تغيير، ثم تفويض مؤقت. هل يمكن استدعاء روتين المزامنة مرة واحدة لمدة دقيقة أو نحو ذلك للتأكد من أن كنت لا تحصل على أي الانجراف OS.

وأن يقال، وأنا متأكد من أن هناك وسيلة للكشف عن ثواني تغيير حدث، وأنا لا أعرف كيفية القيام بذلك.

تحديث:

هذا الرابط ديه التنفيذ على غرار ما كنت تتصور. مجرد تعديله بحيث كنت لا تمسك بشكل دائم في حلقة وفويلا! لديك روتين المزامنة.

وتحديث 2:

وبناء على ردود الفعل من Shog9، وأعتقد أن هذا قد يكون طريقة أفضل من الاقتراع:

Public Class Form1
   Private WithEvents clockTimer As New Timer
   Private currentTime As DateTime = DateTime.MinValue

   Private Sub ClockTick(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles clockTimer.Tick

      UpdateTimer()
      DisplayTimer()
   End Sub

   Private Sub UpdateTimer()
      currentTime = DateTime.Now

      clockTimer.Stop()
      clockTimer.Interval = 1000 - currentTime.Millisecond
      clockTimer.Start()
   End Sub

   Private Sub DisplayTimer()
      lblTime.Text = currentTime.ToString("T")
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load

      UpdateTimer()
      DisplayTimer()
   End Sub
End Class

والآن، استنادا إلى بلدي التجارب الأولية، أن هناك نوعا من الانجراف مع كل حدث القراد. على الجهاز الخاص بي، وتنوعت ما بين 12 و 20 ميلي ثانية. إذا كان أي شخص لديه فكرة عن كيفية تصحيح موثوق الانجراف، وأود أن تكون مهتمة في التعلم.

نصائح أخرى

استخدم كائن الموقت، تعيين انها "الفاصلة" إلى 0، تعيين انها "تمكين" إلى true. والتي تطلق تقريبا كل 15 ميلي ثانية (على أساس تكوين الأجهزة). في هذه الطريقة، تعيين MyLabel.Text = DateTime.Now.ToString () (أو ما تفعلونه).

وهذا هو performant للتماما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top