2013-08-07 28 views
6

Làm thế nào để dừng bộ đếm thời gian sau một số dấu tích hoặc sau, giả sử, 3-4 giây?C# hẹn giờ dừng sau một số số lần tự động đánh dấu

Vì vậy, tôi bắt đầu hẹn giờ và tôi muốn sau 10 lần đánh dấu hoặc sau 2-3 giây để tự động dừng.

Cảm ơn!

+1

Có quá nhiều bộ tính giờ trong C# :-) Bộ đếm thời gian (lớp/vùng tên) nào. Có ** ít nhất ** 5 bộ hẹn giờ: http://stackoverflow.com/questions/10317088/why-there-are-5-versions-of-timer-classes-in-net – xanatos

+0

system.windows.forms.timer –

+0

Có lẽ bạn nên thích câu trả lời của tôi khi bạn không mệt mỏi;) –

Trả lời

9

Bạn có thể giữ một bộ đếm như

int counter = 0; 

sau đó trong mỗi đánh dấu bạn tăng nó. Sau khi giới hạn của bạn, bạn có thể ngừng hẹn giờ. Thực hiện việc này trong sự kiện đánh dấu của bạn

counter++; 
if(counter ==10) //or whatever your limit is 
    yourtimer.Stop(); 
0

Giả sử bạn đang sử dụng System.Windows.Forms.Tick. Bạn có thể theo dõi một quầy, và thời gian nó sống như vậy. Đó là một cách hay để sử dụng thuộc tính Thẻ của bộ hẹn giờ. Điều này làm cho nó có thể tái sử dụng cho các bộ đếm thời gian khác và giữ mã chung của bạn, thay vì sử dụng một định nghĩa toàn cầu int counter cho mỗi bộ hẹn giờ.

mã này rất yên tĩnh vì bạn có thể gán trình xử lý sự kiện này để quản lý thời gian tồn tại và trình xử lý sự kiện khác để xử lý các hành động cụ thể mà bộ hẹn giờ được tạo.

System.Windows.Forms.Timer ExampleTimer = new System.Windows.Forms.Timer(); 
    ExampleTimer.Tag = new CustomTimerStruct 
    { 
     Counter = 0, 
     StartDateTime = DateTime.Now, 
     MaximumSecondsToLive = 10, 
     MaximumTicksToLive = 4 
    }; 

    //Note the order of assigning the handlers. As this is the order they are executed. 
    ExampleTimer.Tick += Generic_Tick; 
    ExampleTimer.Tick += Work_Tick; 
    ExampleTimer.Interval = 1; 
    ExampleTimer.Start(); 


    public struct CustomTimerStruct 
    { 
      public uint Counter; 
      public DateTime StartDateTime; 
      public uint MaximumSecondsToLive; 
      public uint MaximumTicksToLive; 
    } 

    void Generic_Tick(object sender, EventArgs e) 
    { 
      System.Windows.Forms.Timer thisTimer = sender as System.Windows.Forms.Timer; 
      CustomTimerStruct TimerInfo = (CustomTimerStruct)thisTimer.Tag; 
      TimerInfo.Counter++; 
      //Stop the timer based on its number of ticks 
      if (TimerInfo.Counter > TimerInfo.MaximumTicksToLive) thisTimer.Stop(); 
      //Stops the timer based on the time its alive 
      if (DateTime.Now.Subtract(TimerInfo.StartDateTime).TotalSeconds > TimerInfo.MaximumSecondsToLive) thisTimer.Stop(); 
    } 

    void Work_Tick(object sender, EventArgs e) 
    { 
     //Do work specifically for this timer 
    } 
0

tôi thường nói chuyện bởi vì bạn đã không đề cập đến đó hẹn giờ, nhưng tất cả họ đều đã bọ ve ... vậy:

bạn sẽ cần một bộ đếm trong lớp như

int count; 

mà bạn sẽ khởi tạo vào đầu bộ hẹn giờ và bạn sẽ cần một ngày giờ giống như

DateTime start; 

mà bạn sẽ khởi tạo ông bắt đầu bộ đếm thời gian của bạn:

start = DateTime.Now; 

và trong phương pháp đánh dấu của bạn, bạn sẽ thực hiện:

if(count++ == 10 || (DateTime.Now - start).TotalSeconds > 2) 
    timer.stop() 

đây là một ví dụ đầy đủ

public partial class meClass : Form 
{ 
    private System.Windows.Forms.Timer t; 
    private int count; 
    private DateTime start; 

    public meClass() 
    { 
    t = new Timer(); 
    t.Interval = 50; 
    t.Tick += new EventHandler(t_Tick); 
    count = 0; 
    start = DateTime.Now; 
    t.Start(); 
    } 

    void t_Tick(object sender, EventArgs e) 
    { 
    if (count++ >= 10 || (DateTime.Now - start).TotalSeconds > 10) 
    { 
     t.Stop(); 
    } 
    // do your stuff 
    } 
} 
4

Khi khoảng thời gian quy định của bộ đếm thời gian đạt được (sau 3 giây), timer1_Tick() trình xử lý sự kiện sẽ được gọi và bạn có thể ngừng bộ hẹn giờ trong trình xử lý sự kiện.

Timer timer1 = new Timer(); 

timer1.Interval = 3000; 

timer1.Enabled = true; 

timer1.Tick += new System.EventHandler(timer1_Tick); 


void timer1_Tick(object sender, EventArgs e) 
{ 
    timer1.Stop(); // or timer1.Enabled = false; 
} 
+0

Thêm lời giải thích. – Omar

+0

Khi đạt được khoảng thời gian đã chỉ định của bộ hẹn giờ (sau 3 giây), trình xử lý sự kiện timer1_Tick() sẽ được gọi và bạn có thể ngừng bộ hẹn giờ trong trình xử lý sự kiện. – beastieboy

0

Khi khởi tạo bộ đếm thời gian đặt giá trị thẻ thành 0 (không).

tmrAutoStop.Tag = 0; 

Sau đó, với mọi dấu chọn, hãy thêm một ...

tmrAutoStop.Tag = int.Parse(tmrAutoStop.Tag.ToString()) + 1; 

và kiểm tra xem nó đạt số mong muốn của bạn:

if (int.Parse(tmrAutoStop.Tag.ToString()) >= 10) 
{ 
    //do timer cleanup 
} 

Sử dụng kỹ thuật này tương tự để thay thế bộ đếm thời gian liên quan đến sự kiện:

if (int.Parse(tmrAutoStop.Tag.ToString()) % 2 == 0) 
{ 
    //do something... 
} 
else 
{ 
    //do something else... 
} 

Để kiểm tra thời gian trôi qua (tính bằng giây):

int m = int.Parse(tmrAutoStop.Tag.ToString()) * (1000/tmrAutoStop.Interval); 
Các vấn đề liên quan