2008-12-16 10 views
9

क्या सी # में दिनांक परिवर्तन की अधिसूचना प्राप्त करने का कोई तरीका है?क्या सी # में दिनांक परिवर्तन की अधिसूचना प्राप्त करने का कोई तरीका है?

मुझे एक आवश्यकता है जहां सिस्टम की तारीख बदलने पर मुझे कुछ करना है।

मैंने पाया कि सिस्टमइवेंट। टाइम चेंज एक ऐसी घटना है जिसे आप हुक कर सकते हैं, हालांकि इसे केवल तभी निकाल दिया जाता है जब उपयोगकर्ता ने समय बदल दिया हो।

+0

आपको वर्णन करना चाहिए कि आप क्या हासिल करने की कोशिश कर रहे हैं और या सिस्टम तिथि बदलने से आपका क्या मतलब है। सभी जवाब अनुमान लगा रहे हैं कि आपका असली सवाल क्या है। –

उत्तर

6

क्या यह मध्यरात्रि में चलने वाले निर्धारित कार्य/क्रॉन नौकरी के द्वारा बेहतर तरीके से संभाला जाएगा?

2

आप इस प्रकार यह लागू कर सकता है (वैसे खराब):

एक बहुत ही हल्के वर्ग जो केवल वर्तमान दिनांक संग्रहीत करता लिखें। इसे एक अलग थ्रेड में शुरू करें और इसे समय-समय पर जांचें, फिर बड़ी मात्रा में सोएं (वास्तव में, आप इसे मध्यरात्रि तक शेष समय से अधिक समय तक सो सकते हैं)। यदि तिथि बदल गई है, तो इसे अपने ऐप के मुख्य भाग में कॉलबैक फ़ंक्शन कॉल करें।

जैसा कि मैंने कहा, यह आपकी समस्या का एक शानदार समाधान प्रतीत नहीं होता है और संभवतः इसे करने के बेहतर तरीके हैं।

+0

इस पर धागा बर्बाद करने का वास्तव में कोई कारण नहीं है। Darryl Braaten के सुझाव के रूप में बस एक कॉलबैक जोड़ें। कॉलबैक को थ्रेडपूल थ्रेड द्वारा निष्पादित किया जाता है, इसलिए आपको इसके लिए एक थ्रेड लटकने की आवश्यकता नहीं है। –

0

आपका ऐप एक लूप चला सकता है जो एक मिनट के लिए सोता है, फिर तारीख की जांच करता है। यदि यह पिछली बार से अलग है, तो अपना तर्क चलाएं।

लेकिन मैं मानता हूं कि इस परिदृश्य को एक निर्धारित कार्य के साथ बेहतर तरीके से संभाला जाएगा।

0

यह सुनिश्चित नहीं है कि इसके लिए कोई घटना है या नहीं, लेकिन यदि नहीं, तो एक उपयोगी कामकाज हर मिनट एक टाइमर को आग लगाना होगा, और यदि कॉल के बीच 5 मिनट से अधिक समय बदल गया है, तो आप निश्चित रूप से सुनिश्चित हो सकते हैं कि समय किसी अन्य तरीके से बदला गया है। यदि आप चाहें तो आप अधिक अच्छी तरह से दानेदार हो सकते हैं, हर सेकेंड की घटना को फायर करके और 10 सेकंड से अधिक समय के अंतर को जांचकर, लेकिन हर मिनट शायद पर्याप्त होगा।

2

आप System.Threading.Timer खोज रहे हैं। यह आपके द्वारा निर्धारित अंतराल पर आग लग जाएगा।

1

मान लिया जाये कि क्या आप को पता है जब कोई उपयोगकर्ता अपना पीसी की तारीख \ समय बदल जाता है के लिए एक ही रास्ता मैं यह करने के पता पूछ रहे हैं, है इवेंटलॉग कुछ इस तरह की निगरानी के लिए,:

static System.Diagnostics.EventLog log = new EventLog("System"); 

    public Form1() 
    { 
     log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten); 
     log.EnableRaisingEvents = true; 
    } 

    void log_EntryWritten(object sender, EntryWrittenEventArgs e) 
    { 
     if (e.Entry.InstanceId == 1 && e.Entry.EntryType == EventLogEntryType.Information) 
      Console.WriteLine("Test"); 
    } 
0

या डीएसटी जानकारी के लिए इस का उपयोग करें: TimeZone.CurrentTimeZone.GetDaylightChanges (DateTime.Today.Year)

2

प्रणाली एक WM_TIMECHANGE message प्रसारण जब उपयोगकर्ता प्रणाली दिनांक/समय बदल जाता है। इसे संभालने का सही तरीका उस संदेश को संभालना है। मुझे लगता है कि .NET इवेंट SystemEvents.TimeChanged बस इसके चारों ओर एक रैपर है।

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

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