2012-07-03 7 views
8

असल में जब हम कुछ अंतराल यानी 5 सेकंड लागू करते हैं तो हमें इसके लिए इंतजार करना पड़ता है।डिस्पैचर टिमर अंतराल लागू करता है और तत्काल निष्पादित करता है

क्या अंतराल को लागू करना और तुरंत टाइमर निष्पादित करना संभव है और 5 सेकेंड का इंतजार नहीं करना है? (मेरा मतलब अंतराल का समय है)।

कोई सुराग?

धन्यवाद !!

public partial class MainWindow : Window 
    { 
     DispatcherTimer timer = new DispatcherTimer(); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      timer.Tick += new EventHandler(timer_Tick); 
      this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
     } 

     void timer_Tick(object sender, EventArgs e) 
     { 
      MessageBox.Show("!!!"); 
     } 

     void MainWindow_Loaded(object sender, RoutedEventArgs e) 
     { 
      timer.Interval = new TimeSpan(0, 0, 5); 
      timer.Start(); 
     } 
    } 
+2

यदि आप तुरंत कुछ करना चाहते हैं, तो इसे तुरंत क्यों निष्पादित करें? – dlev

+1

@dlev दाएं लेकिन मैं और अधिक सुरुचिपूर्ण तरीका देखना चाहता हूं ... –

+0

मुझे नहीं लगता कि एक विधि को सीधे कॉल करने के बारे में क्या सुरुचिपूर्ण है। आपको शायद एक नई विधि बनाना चाहिए, जिसे दोनों जगहों पर बुलाया जाता है, लेकिन विचार समान है: यदि आप अब कुछ घटित करना चाहते हैं, तो बस इसे करें! – dlev

उत्तर

7

प्रारंभ में अंतराल को शून्य पर सेट करें और फिर इसे बाद में कॉल पर उठाएं।

void timer_Tick(object sender, EventArgs e) 
{ 
    ((Timer)sender).Interval = new TimeSpan(0, 0, 5); 
    MessageBox.Show("!!!"); 
} 
+0

जिन का समाधान क्लीनर है। –

13

निश्चित रूप से और अधिक सुरुचिपूर्ण समाधान कर रहे हैं, लेकिन एक hacky जिस तरह से आप अंतराल शुरू में सेट करने के बाद सिर्फ timer_Tick विधि कॉल करने के लिए है। यह हर टिक पर अंतराल सेट करने से बेहतर होगा।

2

इस कोशिश कर सकते:

timer.Tick += Timer_Tick; 
timer.Interval = 0; 
timer.Start(); 

//... 

public void Timer_Tick(object sender, EventArgs e) 
{ 
    if (timer.Interval == 0) { 
    timer.Stop(); 
    timer.Interval = SOME_INTERVAL; 
    timer.Start(); 
    return; 
    } 

    //your timer action code here 
} 

एक और तरीका है दो ईवेंट हैंडलर्स उपयोग करने के लिए हो सकता है (जाँच से बचने के लिए एक हर टिक पर "अगर"):

timer.Tick += Timer_TickInit; 
timer.Interval = 0; 
timer.Start(); 

//... 

public void Timer_TickInit(object sender, EventArgs e) 
{ 
    timer.Stop(); 
    timer.Interval = SOME_INTERVAL; 
    timer.Tick += Timer_Tick(); 
    timer.Start(); 
} 

public void Timer_Tick(object sender, EventArgs e) 
{ 
    //your timer action code here 
} 

हालांकि क्लीनर तरीका क्या है पहले से ही सुझाव दिया गया था:

timer.Tick += Timer_Tick; 
timer.Interval = SOME_INTERVAL; 
SomeAction(); 
timer.Start(); 

//... 

public void Timer_Tick(object sender, EventArgs e) 
{ 
    SomeAction(); 
} 

public void SomeAction(){ 
    //... 
} 
संबंधित मुद्दे