簡體   English   中英

Application.DoEvents();

[英]Application.DoEvents();

我如何保持我的C#表單,讓我們說是一個for循環,從鎖定? 我是否調用Application.DoEvents(); 在循環之前或之后? 從我所聽到的使用DoEvents方法將保持我的應用程序鎖定。

您不應該使用Application.DoEvents()來保持應用程序的響應。

調用此方法將允許調度任何等待的Windows消息。 這意味着如果用戶單擊按鈕(或執行任何其他用戶交互),則將處理該操作。 因此,這可能導致重入。 如果他們按下與導致循環的那個按鈕相同的按鈕,那么你將在完成之前再次調用例程!

相反,您應該使用BackgroundWorker線程來執行長流程,然后在操作完成后執行所需的任何其他操作。 例如,按下一個按鈕后,您將啟動工作線程,然后禁用您的按鈕,以便不再按下它。 工作線程完成后,您將再次啟用該按鈕。

有幾種方法,這個(DoEvents)只是強制消息泵處理消息。 有些人在一個線程的循環結束時(總是在循環內)放置一個Thread.Sleep。 您在線程中究竟做了什么,因為可能有更好的方法來實現您的整體目標?

如果進程導致UI鎖定了不可接受的時間,請嘗試使用單獨的線程(創建它,使用線程池或使用BackgroundWorker類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM