2010-08-15 128 views

Trả lời

14

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).

+0

Cảm ơn bạn! – Chin

+3

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. –

+1

Để 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)); –

10

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; 
4

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).

1

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ác vấn đề liên quan