Tôi muốn làm chậm vòng lặp sao cho vòng lặp đó cứ sau 5 giây.Bộ đếm thời gian C# (làm chậm vòng lặp)
Trong ActionScript, tôi sẽ sử dụng bộ hẹn giờ và hẹn giờ hoàn thành sự kiện để thực hiện việc này. Làm thế nào tôi sẽ đi về nó trong C#?
Tôi muốn làm chậm vòng lặp sao cho vòng lặp đó cứ sau 5 giây.Bộ đếm thời gian C# (làm chậm vòng lặp)
Trong ActionScript, tôi sẽ sử dụng bộ hẹn giờ và hẹn giờ hoàn thành sự kiện để thực hiện việc này. Làm thế nào tôi sẽ đi về nó trong C#?
Bạn có thể thêm cuộc gọi này bên trong vòng lặp của bạn:
System.Threading.Thread.Sleep(5000); // 5,000 ms
hoặc thích hợp hơn để có thể đọc tốt hơn:
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
Tuy nhiên, nếu ứng dụng của bạn có một giao diện người dùng mà bạn không bao giờ nên ngủ trên thread foreground (luồng xử lý vòng lặp tin nhắn ứng dụng).
Bạn có thể thử sử dụng Timer,
using System;
public class PortChat
{
public static System.Timers.Timer _timer;
public static void Main()
{
_timer = new System.Timers.Timer();
_timer.Interval = 5000;
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true;
Console.ReadKey();
}
static void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//Do Your loop
}
}
Ngoài ra nếu hoạt động của bạn trong vòng lặp có thể kéo dài hơn sau đó 5 giây, Bạn có thể đặt
_timer.AutoReset = false;
để vô hiệu hóa tiếp theo hẹn giờ đánh dấu cho đến khi kết thúc hoạt động trong vòng lặp
Nhưng sau đó kết thúc cuối vòng lặp Bạn cần một lần nữa để kích hoạt tính năng hẹn giờ như
_timer.Enabled = true;
Không sử dụng vòng lặp nào cả. Thiết lập đối tượng Timer
và phản hồi sự kiện được kích hoạt của nó. Xem ra, bởi vì những sự kiện này sẽ cháy trên một sợi khác nhau (thread của bộ đếm thời gian từ threadpool).
Giả sử bạn có một vòng lặp for
mà bạn muốn sử dụng để ghi vào cơ sở dữ liệu mỗi giây. Sau đó tôi sẽ tạo một bộ đếm thời gian được đặt thành khoảng thời gian 1000 ms và sau đó sử dụng bộ hẹn giờ giống như cách bạn sẽ sử dụng vòng lặp while
nếu bạn muốn nó hoạt động như một vòng lặp for
. Bằng cách tạo ra các số nguyên trước khi vòng lặp và thêm vào nó bên trong nó.
public patial class Form1 : From
{
timer1.Start();
int i = 0;
int howeverLongYouWantTheLoopToLast = 10;
private void timer1_Tick(object sender, EventArgs e)
{
if (i < howeverLongYouWantTheLoopToLast)
{
writeQueryMethodThatIAssumeYouHave(APathMaybe, i); // <-- Just an example, write whatever you want to loop to do here.
i++;
}
else
{
timer1.Stop();
//Maybe add a little message here telling the user the write is done.
}
}
}
Cảm ơn bạn! – Chin
Mã này sẽ chờ 5 giây giữa mỗi lần lặp, không kích hoạt sau mỗi 5 giây. Nếu mã bạn đang thực hiện trong vòng lặp của bạn mất nhiều thời gian, như yêu cầu web thì tổng số sẽ dài hơn 5 giây. Giải pháp với Bộ hẹn giờ từ người đăng ký chính xác hơn cho câu hỏi của bạn, nhưng mọi giải pháp có thể phù hợp với nhu cầu của bạn. –
Để dễ đọc, chức năng Ngủ cũng có thể lấy một TimeSpan làm đối số. System.Threading.Thread.Sleep (TimeSpan.FromSeconds (5)); –