هل هناك فئة مؤقت في C# ليست في مساحة اسم Windows.forms؟
-
05-07-2019 - |
سؤال
أريد استخدام مؤقت في بلدي البسيط .صافي التطبيق المكتوبة في C#. الوحيد الذي يمكنني العثور عليه هو فئة Windows.Forms.Timer. لا أريد الإشارة إلى مساحة الاسم هذه فقط لتطبيق وحدة التحكم الخاصة بي.
هل هناك فئة C# Timer (أو Timer Like) للاستخدام في تطبيقات وحدة التحكم؟
المحلول
System.Timers.Timer
وكما يقول ماجيكات:
System.Threading.timer
يمكنك رؤية الاختلافات هنا:http://intellitect.com/system-windows-forms-timer-vs-system-threading-timer-vs-system-timers-timer/
ويمكنك رؤية أمثلة MSDN هنا:
http://msdn.microsoft.com/en-us/library/system.timers.timer(vs.80).aspx
و هنا:
http://msdn.microsoft.com/en-us/library/system.threading.timer(vs.80).aspx
نصائح أخرى
أود أن أوصي Timer
الفصل في System.Timers
مساحة الاسم. أيضا من الاهتمام ، Timer
الفصل في System.Threading
مساحة الاسم.
using System;
using System.Timers;
public class Timer1
{
private static Timer aTimer = new System.Timers.Timer(10000);
public static void Main()
{
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
}
// Specify what you want to happen when the Elapsed event is
// raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}
}
مثال من مستندات MSDN.
هناك على الأقل System.Timers.Timer و System.Threading.timer الفصول الدراسية التي أعرفها.
شيء واحد يجب الانتباه إليه (إذا لم تكن قد فعلت هذا من قبل بالفعل) ، قل إذا كان لديك بالفعل مساحة اسم النظام. :
using System.Threading;
using Timer = System.Timers.Timer;
لدى Jon Skeet مقالًا فقط على أجهزة ضبط الوقت في دليله متعدد القوات ، إنه يستحق قراءة:http://www.yoda.arachsys.com/csharp/threads/timers.shtml
هذا السؤال قديم ، وتغطي الإجابات الحالية جيدًا كما كانت في ذلك الوقت. في غضون ذلك ، حدث شيء جديد.
مؤقت ، بالتأكيد ، ماذا؟
يعد استخدام مؤقت وسيلة لتشغيل بعض المعالجة مع بعض التأخير و/أو في فترة منتظمة. هناك حالتان:
(1) إنه فقط تشغيل بعض الكود القصيرة بشكل دوري دون أي قلق ، ولا مشكلة ، ولا فوضى. إذا لم يكن جهاز توقيت Windows Forms غير مناسب ، فعندئذٍ System.Timers.Timer
مع ل SynchronizingObject
الخاصية تجعلها أكثر وضوحًا من System.Threading.Timer
.
(2) ما ترميزه في عالم المعالجة المتزامنة غير المتزامنة. كان ذلك تقليديًا معرضًا للخطأ ، وصعوبة تصحيحه ، والتصحيح ، مهما كان الموقت العادي المستخدم.
في الحالة الثانية ، قد تفلت من النهج التقليدي ، ولكن حذار ، التعقيد يتربص وعلى استعداد لأكلك ليس فقط مرة واحدة ولكن في أي وقت لا تتختار فيه أفضل خيار ، مع تأثيرات تراكمية.
الآن لدينا شيء أفضل
إذا كان وضعك يتعامل مع نوع من "الأحداث" في التعامل (مهما كانت الطريقة التي يتم ترميزها: مفاتيح المفاتيح ، أزرار الماوس ، بايت من منفذ متسلسل ، من اتصال الشبكة ، من القياسات ، إلخ) ، يجب أن تفكر في البرمجة التفاعلية.
كشفت البرمجة التفاعلية في السنوات الأخيرة بطريقة ما عن كيفية ترميز هذه الحالات ، مع عدم الوقوع في مصائد التعقيد.
لذا ، من الناحية الفنية ، فإن الرابط التالي هو إجابة على السؤال: إنه مؤقت موجود في System.Reactive.Linq
مساحة الاسم: طريقة الملاحظة.
لكي نكون منصفين ، إنه مؤقت يأتي ويلعب بشكل جيد مع عقلية البرمجة التفاعلية والكثير من الأشياء المتغيرة للعبة. ومع ذلك ، قد تكون أو لا تكون أفضل أداة ، اعتمادًا على السياق.
نظرًا لأن هذا السؤال يركز على مقدمة جيدة لإطار .NET التفاعلي
أو لوثيقة واضحة وموضحة وأكثر عمومية (وليس Microsoft) ، هذا يبدو جيدًا مقدمة للبرمجة التفاعلية التي فقدتها.
System.Diagnostics.StopWatch إذا كان هدفك هو الوقت الذي يستغرقه شيء ما للتشغيل
يوصى بعدم الاستخدام System.Timer
فئة المؤقت.