2012-05-05 34 views
54
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red; 
System.Threading.Thread.Sleep(1000); 

Tôi muốn đợi một giây trước khi in các ô lưới bằng mã này, nhưng nó không hoạt động. Tôi có thể làm gì?Đợi một giây trong chương trình đang chạy

+0

Bạn có thể cung cấp thêm ngữ cảnh không? –

+1

Mã nào được cho là chạy sau 1 giây chờ đợi? – Allensb

+1

Làm sao bạn biết nó không hoạt động? Hãy thử ngủ 10000 và xem nó có hoạt động hay không. 1000 là rất ngắn để đánh giá nếu nó đang làm việc. – Missy

Trả lời

93

Tạm dừng, nhưng bạn không thấy màu đỏ của mình xuất hiện trong ô? Hãy thử điều này:

dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red; 
dataGridView1.Refresh(); 
System.Threading.Thread.Sleep(1000); 
1

sử dụng dataGridView1.Refresh(); :)

21

Cá nhân tôi nghĩ rằng Thread.Sleep là một việc thực hiện kém. Nó khóa giao diện người dùng, vv Tôi cá nhân như triển khai bộ đếm thời gian vì nó chờ đợi sau đó cháy.

Cách sử dụng: DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));

//Note Forms.Timer and Timer() have similar implementations. 

public static void DelayAction(int millisecond, Action action) 
{ 
    var timer = new DispatcherTimer(); 
    timer.Tick += delegate 

    { 
     action.Invoke(); 
     timer.Stop(); 
    }; 

    timer.Interval = TimeSpan.FromMilliseconds(millisecond); 
    timer.Start(); 
} 
-4

Có thể thử mã này

void wait (int x){ 
     DateTime t = DateTime.Now; 
     DateTime tf = DateTime.Now.AddSeconds(x); 

     while (t < tf) 
     { 
      t = DateTime.Now; 
     } 
    } 
+3

Đây là giải pháp hợp lệ. Tuy nhiên, bạn nên thêm một mô tả về lợi ích và tác hại của nó, chẳng hạn như đề cập rằng bởi vì nó là một giải pháp chờ đợi bận rộn, nó sẽ mất thời gian CPU. – Hosch250

+0

Giải pháp ngắn hơn là giải pháp tốt hơn –

1

Bận chờ đợi sẽ không có một nhược điểm nghiêm trọng nếu nó là ngắn. Trong trường hợp của tôi, cần phải cung cấp phản hồi trực quan cho người dùng bằng cách nhấp vào một điều khiển (đó là một điều khiển biểu đồ có thể được sao chép vào clipboard, thay đổi nền của nó trong vài mili giây). Nó hoạt động tốt theo cách này:

using System.Threading; 
... 
Clipboard.SetImage(bm); // some code 
distribution_chart.BackColor = Color.Gray; 
Application.DoEvents(); // ensure repaint, may be not needed 
Thread.Sleep(50); 
distribution_chart.BackColor = Color.OldLace; 
.... 
Các vấn đề liên quan