2012-08-12 10 views
5

मुझे this answer मिला और मैं इसका पालन करने का प्रयास करता हूं, लेकिन जब मैंने अपनी सेवा शुरू की, तो मुझे कोई काम नहीं आया। एक बात जिसे मैं समझ नहीं पाया: `_timer = नया टाइमर (10 * 60 * 1000); // हर 10 मिनटदैनिक कार्य करने के लिए एक सी # विंडोज सेवा शेड्यूल करें

मैं रोज़ाना 10:00 बजे अपनी सेवा करना चाहता हूं, मैं यह कैसे कर सकता हूं?

+0

आप जो भी चलाने की कोशिश कर रहे हैं उसके आधार पर, इसे कंसोल एप्लिकेशन के रूप में बनाने के लिए बेहतर हो सकता है और जब भी आप चाहें विंडोज टास्क शेड्यूलर इसे चला सकते हैं। –

+0

@ आप 'आदिल' उत्तर स्वीकार नहीं कर सकते हैं? जो ठीक और अच्छा समाधान भी काम कर रहा है। :) चूंकि यह प्रश्न अन-उत्तर श्रेणी के अंतर्गत है। अपना प्रश्न +1 करें और 'आदिल' जवाब दें। सहायक :)))), – RajeshKdev

उत्तर

7

आप current time और अपने desired schedule time के बीच difference पता लगाना और बीत अंतराल तदनुसार कर सकते हैं। इस तरह शेड्यूल समय पर टाइमर will fire once की घटना। समय समाप्त होने पर 24 घंटे तक अंतराल सेट करें।

private System.Timers.Timer _timer;  

private void SetTimer() 
{ 
    DateTime currentTime = DateTime.Now; 
    int intervalToElapse = 0; 
    DateTime scheduleTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, 10,0,0); 

    if (currentTime <= scheduleTime) 
     intervalToElapse = (int)scheduleTime.Subtract(currentTime).TotalSeconds; 
    else 
     intervalToElapse = (int)scheduleTime.AddDays(1).Subtract(currentTime).TotalSeconds; 

    _timer = new System.Timers.Timer(intervalToElapse); 

    _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed); 
    _timer.Start(); 
} 

void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
     //do your work 
     _timer.Interval = (24 * 60 * 60 * 1000); 
} 
+1

क्या मुझे 'ऑनस्टार्ट' में 'SetTimer' विधि का उपयोग करना है? – Nothing

+2

आप जहां भी चाहें इसे कॉल कर सकते हैं, लेकिन ऑनस्टार्ट पर कॉल करना सुनिश्चित करेगा कि इसमें शेड्यूल कार्य नहीं लगेगा। उदाहरण के लिए आपकी सेवा 9:58 पर शुरू हुई तो इसे कॉल किया जाना चाहिए ताकि टाइमर विलंब की घटना 10 – Adil

+1

पर अच्छी हो!^____ ^ – Sai

1

हालांकि टाइमर मतदान जवाब आप संदर्भ में हर दस मिनट है - अपने ही प्रसंस्करण दिन में एक बार:

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    // ignore the time, just compare the date 
    if (_lastRun.Date < DateTime.Now.Date) 
    { 

यह 10:00 हो एक और शर्त जोड़ बनाने के लिए, उदाहरण के लिए:

_lastRun.Date < DateTime.Now.Date & & DateTime.Now.Hour = 10

दस मिनट का समय मतदान आवृत्ति के रूप में उपयोग किया जाता है।

+0

तो क्या आप मुझे बता सकते हैं, 10 मिनट का क्या मतलब है? धन्यवाद। – Nothing

+0

कृपया मेरा संपादन देखें। यदि आप कोड को शेड्यूल किए गए कार्य पर चलाने के लिए चाहते हैं तो बस एक एक्सई है कि जब आप कमांड लाइन पैरामीटर से शुरू करते हैं तो यह प्रक्रिया चलाता है, लेकिन यदि आप एक्सई को डबल क्लिक करना चाहते हैं तो यह आपको इसे चलाने के निर्देशों को दिखाएगा अप्रत्याशित - इस तरह लोग सोचते हैं कि प्रोग्राम क्या करता है, इस पर लोग आकस्मिक रूप से एक प्रक्रिया को लात मारते हैं। –

3

विंडोज़ में कार्य शेड्यूलर का निर्माण किया गया है जो कि किसी शेड्यूलिंग आवश्यकताओं के लिए उपयोग करना बेहतर है। सिस्टम रीबूट, डे लाइट सेविंग जैसे शेड्यूलिंग कार्यों के साथ काम करते समय बहुत सी चीजें गलत हो सकती हैं।

आयुर्वे द्वारा आपके ब्लॉग को अपने शेड्यूलर बनाने में कुछ मुद्दों के बारे में बता सकते हैं। Rotten scheduling: Don’t roll your own

4

अपना खुद का टाइमर रोल करने के बजाय आप सेवा होस्ट करने के लिए क्वार्ट्ज.NET का उपयोग कर सकते हैं। यह अच्छी तरह से काम करता है और इसमें कुछ अतिरिक्त सुविधाएं हैं जैसे कैच अप (यदि आपको इसकी आवश्यकता है) साथ ही साथ सेवा की खेती करने की क्षमता भी है।

http://quartznet.sourceforge.net/

+0

हम्म - यह अच्छा लगता है लेकिन मैंने पृष्ठ पर एक नज़र डाली और इसमें अधिक जानकारी नहीं थी, क्या आपके पास कोड उदाहरण है? ** संपादित करें ** - [इसे मिला] (http://quartznet.sourceforge.net/tutorial/lesson_1.html) –

संबंधित मुद्दे