Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Application.DoEvents() trên C# có ý nghĩa gì?

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    07T1 - DUT
    Bài viết
    101

    Mặc định Application.DoEvents() trên C# có ý nghĩa gì?

    Mình có đọc một đoạn code làm chuyển màu nền liên tục của form nhưng không hiểu dòng Application.DoEvents();
    Ai có thể giải thích cụ thể dùm với, sử dụng nó trong trường hợp nào?
    C Code:
    1.  while (Visible)
    2.             {
    3.                 for (int c = 0; c < 255 && Visible; c++)
    4.                 {
    5.                     this.BackColor = System.Drawing.Color.FromArgb(c, 255 - c, c);
    6.                     System.Threading.Thread.Sleep(3);
    7.                     Application.DoEvents();
    8.             }
    9.             }
    In EarnMoney class doesn't have WorkShy method,but it has WorkingHard method!
    http://vn.myblog.yahoo.com/hoangsan_762

  2. #2
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    DoEvents() có chức năng bỏ qua 1 một process đang thực thi để xứ lý các process khác.Ví dụ bạn đang có một Thread đang chạy và bạn muốn ngay lập tức thực thi một công việc khác mà không phải chờ Thread làm việc hết phiên của mình thì bạn gọi phương thức DoEvent() rồi gọi phương thức cần thực thi!
    DoEvents() cũng hay dùng trong các vòng lặp như ví dụ của bạn
    Cánh Chym ứ mỏi

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    6

    Điếu cày hình như lộn process & thread rồi.
    Application.DoEvents() nó sẽ suppend thread hiện tại (gọi hàm đó) để cho các message khác trong hàng đợi thông điệp được gọi thực hiện (theo msdn).
    Theo mình nghĩ, nếu current thread là GUI thread, ví dụ như bạn đang gọi hàm đó trong click button handler, thì Application.DoEvents() chỉ đơn giản là stop lại và đợi khi nào nó xử lý các message trong hàng đợi thông điệp xong (thường là vài lệnh repaint()) thì nó sẽ thực thi tiếp.

    Bạn có thể tham khảo chương trình này, Khi bạn click vô button. Button sẽ thực hiện một heavy work. Nhưng tại mỗi vòng lặp, heavy work này cho phép windows tiếp tục sử lý thông điệp (repaint,...). Nếu bạn click thêm một lần nữa, nếu lúc đó chương trình được trao quyền xử lý thông điệp trong hàng đợi thì bạn sẽ vô hàm click handler một lần nữa và lần trước đó bị suppends. Lúc này, nếu bạn đóng cửa sổ, bạn sẽ đóng được, nhưng hàm thì vẫn chạy và chương trình bạn chưa kết thúc.

    Code:
    namespace winform_DoEvent
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnHeavyWork_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < int.MaxValue; i++)
                {
                    System.Windows.Forms.Application.DoEvents();
                    Console.WriteLine(i);
                }
            }
        }
    }
    Trong chương trình của bạn
    Code:
    while (Visible)
                {
                    for (int c = 0; c < 255 && Visible; c++)
                    {
                        this.BackColor = System.Drawing.Color.FromArgb(c, 255 - c, c);
                        System.Threading.Thread.Sleep(3);
                        Application.DoEvents();
                }
                }
    trước hàm Application.DoEvents(), BackColor của this bị thay đổi, nhưng không thể effect vì bạn chưa cho phép chương trình repaint(). Bạn cần repaint() bằng cách gọi Application.DoEvents(). lệnh đó sẽ suppends() hàm của bạn cho đến khi cửa sổ của bạn được repaint() --> background color có hiệu lực. Rồi tiếp tục vòng lặp thông điệp.

Các đề tài tương tự

  1. Tuyển nhân viên Lập trình ứng dụng trên điện thoại (Mobile Application)
    Gửi bởi hva10 trong diễn đàn Tuyển dụng - Việc làm CNTT
    Trả lời: 3
    Bài viết cuối: 22-08-2011, 03:41 PM
  2. Kết nối với Database trên host từ Winform Application
    Gửi bởi iamonlining trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 25-05-2011, 10:14 AM
  3. Có hàm nào tương tự DoEvents trong C# ???
    Gửi bởi nhquynam trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 14-05-2011, 09:05 AM
  4. Lỗi: Server Error in '/' Application khi upload file image trên hosting
    Gửi bởi chaocacban2009 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 9
    Bài viết cuối: 10-04-2011, 02:37 PM
  5. application.startuppath có ý nghĩa gì?
    Gửi bởi kaka167 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 04-04-2010, 06:18 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn