2010-07-21 19 views
7

वहाँ है वास्तविक समय के साथ हर एक्स सेकंड आग, लेकिन सिंक में रहता है एक .NET टाइमर सी # सुनिश्चित कर सकते हैं कि कोई "बहाव" घटनाओं के बीच में है में उपलब्ध है? यही है, यदि आप टाइमर को हर एक्स सेकंड से बाहर जाने के लिए सेट करते हैं, तो ऑपरेटिंग के दिनों के बाद यह बहाव नहीं होगा, यानी यह सुनिश्चित करने के लिए कि एक दिन में एक्स सेकंड की घटनाओं की दृष्टिकोण संख्या क्या होनी चाहिए?सी # टाइमर कि (अर्थात् कोई बहाव के साथ)

यदि नहीं, वहाँ एक अच्छी तरह से ज्ञात कोड उदाहरण है कि सी # में एक टाइमर समारोह लपेट यह करने के लिए होता है?

उत्तर

6

केवल आप quartz.net के लिए एक लिंक दे रही है, लेकिन यह एक पूरी तरह से योग्य, उद्यम, परीक्षण, ... पुस्तकालय है के लिए खेद है ... आप को बदलने की जरूरत नहीं है पहिया :)

यदि आप के बारे में भूमि के ऊपर चिंता, भूमि के ऊपर के लिए अपनी परिभाषा क्या है? क्या यह फ़ाइल आकार (द्विआधारी लगभग 0,5 एमबी है) या तर्क में उपरि है। अच्छी तरह से तर्क-भाग के लिए: मैं कि उनके IJob -interface को लागू करने के लिए उपभोक्ता की बेहतर कोड मजबूर करने के लिए एक अच्छा काम करता है लगता है। मैं इनलाइन-विधियों का वह बड़ा मित्र नहीं हूं (जैसे एक उदाहरण के रूप में, आप टाइमर विलंब पर अपने पॉइंटर्स को आग लगा सकते हैं) - कक्षाएं आपको अधिक संभावनाएं देगी, और एक बार फिर, बेहतर ओप, डोमेन-डिज़ाइन को मजबूर करेंगी .. ।

लेकिन: कर quartz.net साथ Console.WriteLine(...) overkill होगा ... :)

+0

क्या यह एक छोटे से WPF ऐप एंड्रियास में अधिक ओवरहेड जोड़ता है? यानी माइकल ने दृष्टिकोण से ऊपर और परे? (यानी यह कहने के लिए अखरोट को तोड़ने के लिए स्लेजहैमर का उपयोग किस हद तक किया जाएगा?) – Greg

+0

मेरा संपादन देखें! ... –

+0

+1 इस पुस्तकालय के बारे में नहीं पता था, लेकिन मैं निश्चित रूप से इसे ध्यान में रखूंगा। –

15

मैं यह सोचते कर रहा हूँ आप पहले से ही कुछ कोशिश की है, और यह drifts कि।

यदि आप घंटे (5,10,15,20 ..) से हर 5 सेकंड में आग लगाना चाहते हैं, तो आप एक बार अपने टाइमर को आग लग सकते हैं, फिर अपने कॉलबैक में, टाइमर को आग लगाना डेटटाइम.अब + अगले 5 सेकंड अंतराल में सेकंड की संख्या।

यह किसी भी रूप में लंबे समय के रूप में अपनी घड़ी सही है बहने रोका जा सके।

कुछ इस तरह

System.Timers.Timer timer = new Timer(); 

void Init() 
{ 
    timer.Elapsed += timer_Elapsed; 
    int wait = 5 - (DateTime.Now.Second % 5); 
    timer.Interval = wait*1000; 
    timer.Start(); 
} 


void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    timer.Stop(); 
    int wait = DateTime.Now.Second % 5; 
    timer.Interval = wait * 1000; 
    timer.Start(); 
} 
+1

अच्छा लगता है - मुझे लगता है कि अगर वहाँ पहले से ही एक समारोह है कि क्या करना होगा यह पहले से ही नेट में दफन नहीं था मैं सोच रहा था फ्रेमवर्क कहीं – Greg

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