Application.DoEvents()筆記


msdn的備注:
當運行 Windows 窗體時,它將創建新窗體,然后該窗體等待處理事件。 該窗體在每次處理事件時,均將處理與該事件關聯的所有代碼。 所有其他事件在隊列中等待。 當代碼處理事件時,應用程序不會響應。 例如,如果將甲窗口拖到乙窗口之上,則乙窗口不會重新繪制。
如果在代碼中調用 DoEvents,則您的應用程序可以處理其他事件。 例如,如果您有向 ListBox 添加數據的窗體,並將 DoEvents 添加到代碼中,那么當將另一窗口拖到您的窗體上時,該窗體將重新繪制。 如果從代碼中移除 DoEvents,那么在按鈕的單擊事件處理程序執行結束以前,您的窗體不會重新繪制。 有關消息的更多信息,請參見 Windows 窗體中的用戶輸入。

例子:
寫一個程序,做一個循環輸出文本的例子,不加Application.DoEvents()則值只顯示輸出循環結束時的結果,如果加了則可以實時的輸出。這個語句的確定是影響了程序的效率。

  private void button1_Click(object sender, EventArgs e)
        {
            long t1 = System.DateTime.Now.Ticks;
            for (int i = 0; i < 10000; i++)
            {
                textBox1.Text = i.ToString();
                System.Windows.Forms.Application.DoEvents();
            }
            long t2 = System.DateTime.Now.Ticks;

            textBox2.Text = (t2 - t1).ToString();
        }

含有System.Windows.Forms.Application.DoEvents(); textBox2.Text 為23471342

 private void button2_Click(object sender, EventArgs e)
        {
            long t1 = System.DateTime.Now.Ticks;
            for (int i = 0; i < 10000; i++)
            {
                textBox3.Text = i.ToString();
                //System.Windows.Forms.Application.DoEvents();
            }
            long t2 = System.DateTime.Now.Ticks;

            textBox4.Text = (t2 - t1).ToString();
        }

不含有System.Windows.Forms.Application.DoEvents(); textBox2.Text 為10900624

所以 DoEvents的好處是可以給用戶帶來好的用戶體驗,而壞處則是成倍的降低程序運行效率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM