هل هناك فئة مؤقت في C# ليست في مساحة اسم Windows.forms؟

StackOverflow https://stackoverflow.com/questions/169332

  •  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فئة المؤقت.

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