سؤال

كيف يمكنني توليد حدث في وقت محدد؟ على سبيل المثال، أقول أنني أرغب في توليد تنبيه في الساعة 8:00 صباحا أن أبلغني 8:00 صباحا (أو حدثا يعلمني بالوقت الحالي في أي وقت معين).

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

المحلول

استخدم ال system.threading.timer. صف دراسي:

var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));

ال callback سيتم استدعاء المندوب في المرة القادمة إنه 8:00 صباحا وكل 24 ساعة بعد ذلك.

يرى هذا حتى السؤال كيفية حساب الحدوث 8:00 القادم.

نصائح أخرى

التصميم على إجابة DTB هذه هي الطريقة التي قمت بتنفيذها.

  private void Form1_Load(object sender, EventArgs e)
    {
        System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);

        //first occurrence at
        var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);

        if (DateTime.Now < dt)
        {
            var timer = new System.Threading.Timer(callback, null, 
                                               //other occurrences every 24 hours
                            dt - DateTime.Now, TimeSpan.FromHours(24));
        }

    }

    private void ProcessTimerEvent(object obj)
    {
        MessageBox.Show("Hi Its Time");
    }

هل يجب أن ينشئ التنبيه من برنامجك؟ نهج بديل هو استخدام المهمة المجدولة (في ويندوز) لتوليد التنبيه. قد تحتاج إلى كتابة برنامج صغير يجمع أي معلومات من ملفات بيانات التطبيق الرئيسية وما إلى ذلك.

هناك فوائد رئيسية لاستخدام هذا النهج:

  1. ليس عليك كتابة أي رمز لدعم الميزة. يمكنك الاستفادة من شيء مدمج في نظام التشغيل. المثال هو لنظام التشغيل Windows، ولكن أنظمة تشغيل أخرى لها نفس الميزة. يمكنك تركيز جهود التطوير والدعم على الكود الخاص بك.
  2. لا يتعين على تطبيقك الرئيسي أن يعمل بمهمة إطلاق النار.
private void Run_Timer()
    {
        DateTime tday = new DateTime();
        tday = DateTime.Today;
        TimeSpan Start_Time = new TimeSpan(8,15,0);
        DateTime Starter = tday + Start_Time;
        Start_Time = new TimeSpan(20, 15, 0);
        DateTime Ender = tday + Start_Time;
        for (int i = 0; i <= 23; i++)
        {
            Start_Time = new TimeSpan(i, 15, 0);
            tday += Start_Time;
            if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
            {
                Time_To_Look = tday;
                timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
                timer1.Start();
                MessageBox.Show(Time_To_Look.ToString());
                break;
            }
        }
    }

يمكننا استخدام هذه الوظيفة للحصول على Timer يعمل لأوقات أو تغييره لتشغيل وقت محدد: D

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