如何保持我的C#表單,讓我們說是在for循環,從鎖定?我打電話給Application.DoEvents();在循環之前或之後?從我聽到的使用DoEvents方法會阻止我的應用程序鎖定。Application.DoEvents();
4
A
回答
11
您不應該使用Application.DoEvents()以保持應用程序的響應。
調用此方法將允許任何等待的窗口消息被分派。這意味着如果用戶點擊一個按鈕(或執行任何其他用戶交互),該操作將被處理。這可能會導致重入。如果他們按下與正在處理的循環相同的按鈕,則在完成之前,您將最終再次調用例程!
相反,您應該使用BackgroundWorker線程來執行較長的過程,然後一旦完成操作就執行所需的任何其他操作。例如,一旦按下按鈕,您將啓動工作線程,然後禁用您的按鈕,因此無法再次按下按鈕。一旦工作線程完成,您將再次啓用該按鈕。
1
有幾種方法,這(DoEvents)只是強制消息泵來處理消息。有些人在一個線程中將一個Thread.Sleep放在循環的最後(總是在循環內)。你究竟在做什麼,因爲可能有更好的方法來完成你的目標?
1
如果該過程導致鎖死爲不可接受的時間量的用戶界面中,嘗試使用一個單獨的線程(或者創建它,使用線程池,或者使用BackgroundWorker類。
相關問題
- 1. 替代Application.DoEvents()
- 2. 在調用Application.DoEvents()
- 3. .net掛在Application.DoEvents
- 4. wxPython Application.DoEvents()等價嗎?
- 5. 替代Application.DoEvents()在WPF
- 6. Application.DoEvents()僅適用於WinForms嗎?
- 7. FormClosing事件中的Application.DoEvents
- 8. Application.DoEvents()在Java中等價嗎?
- 9. Visual Studio性能分析:Application.DoEvents()
- 10. Android等效於C#的Application.DoEvents();
- 11. .NET線程模型和Application.DoEvents與Thread.Sleep
- 12. Application.DoEvents需要很長的時間
- 13. Application.DoEvents() - >在java中的等價函數?
- 14. Application.DoEvents()並在某些機器上凍結
- 15. 在表單級別是否存在「Application.DoEvents」?
- 16. Application.DoEvents()在等待WebBrowser完成加載時出現問題
- 17. Application.DoEvents,什麼時候需要,什麼時候不需要?
- 18. VB.NET while循環調用application.DoEvents每秒一次
- 19. C#Application.DoEvents不能在我的應用程序中工作
- 20. 覆蓋C#中的Application.Doevents(),以便在調試模式下禁用
- 21. 想要調用相同的BackgroundWorker多次沒有使用Application.DoEvents
- 22. 如何避免可怕的Application.DoEvents()多線程時
- 23. 在循環中調用Application.DoEvents()所需的替代方法
- 24. Application.DoEvents()在應用程序運行時不斷調用?
- 25. 是否有任何替代Application.DoEvents()的Web服務
- 26. 是Application.DoEvents發送消息到一個單獨的線程?
- 27. 標籤文本將不會更新C# - 刷新和Application.DoEvents不起作用
- 28. 當模態進度對話框啓動時,可以調用「Application.DoEvents」嗎?
- 29. Devexpress MessageBox正在自動關閉
- 30. 是否將事件返回到子頂部?