2011-06-23 19 views
6

में दो बार घटना फायरिंग को समाप्त कर दिया है। मेरा टाइमर 'समाप्त हो गया' कार्यक्रम प्रोग्राम शुरू होने पर दो बार आग लग जाता है। 'विलुप्त' ईवेंट हैंडलर का एकमात्र असाइनमेंट 'मुख्य' विधि में है। क्या ऐसा कुछ है जो मैं गलत कर रहा हूं?टाइमर ने सी # कमांड लाइन प्रोग्राम

//class level clock 
public static System.Timers.Timer Clock; 

static void Main(string[] args) 
    { 
     Clock = new System.Timers.Timer(); 
     Clock.Elapsed += new ElapsedEventHandler(Clock_Elapsed); 
     Clock.AutoReset = false; 
     Clock.Interval = timerInterval; //this needs to be in milliseconds! 
     Clock.Enabled = true; 

     //run infinite loop until q is pressed 
     while (Console.Read() != 'q') 
     {} 
    } 

static void Clock_Elapsed(object sender, ElapsedEventArgs e) 
    { 
    Clock.Stop(); 
    //do some stuff 
    Clock.Start();    
    } 

अद्यतन:

AutoReset @ fparadis2 द्वारा प्रदान की दो बार फायरिंग तय की। मूल मुद्दा यह था कि मेरा टाइमर अंतराल 30000 मिलीसेकंड (30 सेकंड) के बजाय 30 मिलीसेकंड पर सेट किया गया था ताकि घटना डबल फायरिंग हो।

+0

[टाइमर आग दो बार] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4309254/timer-fire-twice) – user7116

उत्तर

13

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

Clock.AutoReset = false; 

प्रत्येक बार टाइमर शुरू करने के लिए केवल एक बार अधिसूचित होने के लिए करना चाहिए।

documentation में विनिर्दिष्ट:

बीत चुके घटना के प्रसंस्करण अंतराल से अधिक तक चलता है, तो घटना फिर से एक और ThreadPool धागे पर उठाया जा सकता है। इस स्थिति में, ईवेंट हैंडलर पुनर्विक्रेता होना चाहिए।

+0

घड़ी अपरिभाषित है? लिंक टूट गया है –

2

आप यह pattern देखकर भी विचार कर सकते हैं।

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