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!
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!
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();
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
}
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
}
}
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;
}
Thêm lời giải thích. – Omar
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
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ó 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
system.windows.forms.timer –
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;) –