2012-07-03 30 views
8

Về cơ bản khi chúng ta áp dụng một khoảng thời gian tức là 5 giây, chúng ta phải đợi nó.DispatcherTimer áp dụng khoảng thời gian và thực hiện ngay lập tức

Có thể áp dụng hẹn giờ và thực hiện hẹn giờ ngay lập tức và không đợi 5 giây? (Tôi có nghĩa là khoảng thời gian).

Bất kỳ đầu mối nào?

Cảm ơn !!

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

Nếu bạn muốn điều gì đó xảy ra ngay lập tức, tại sao không thực hiện ngay lập tức? – dlev

+1

@dlev Phải Nhưng tôi muốn thấy cách thanh lịch hơn ... –

+0

Tôi không thấy điều gì không thích hợp về việc gọi trực tiếp một phương thức. Có lẽ bạn nên tạo một phương thức mới, được gọi ở cả hai nơi, nhưng ý tưởng là như nhau: nếu bạn muốn một cái gì đó xảy ra ngay bây giờ, thì cứ làm đi! – dlev

Trả lời

7

Ban đầu đặt khoảng thời gian là 0 và sau đó tăng khoảng thời gian đó lên lần gọi tiếp theo.

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

Dung dịch của Jin sạch hơn. –

13

Có các giải pháp chắc chắn thanh lịch hơn, nhưng cách hacky là chỉ cần gọi phương thức timer_Tick sau khi bạn đặt khoảng thời gian ban đầu. Đó là tốt hơn so với thiết lập khoảng thời gian trên mỗi đánh dấu.

2

có thể thử này:

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 
} 

Một cách khác có thể sử dụng hai xử lý sự kiện (để tránh kiểm tra một "nếu" ở mọi đánh dấu):

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 
} 

Tuy nhiên cách sạch hơn là gì đã được đề xuất:

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

//... 

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

public void SomeAction(){ 
    //... 
} 
Các vấn đề liên quan