我正在使用C#.net,Windows應用程序,我想使用按鈕中的Progressbar而不使用BackGroundworker,任何人都可以建議,在此先感謝....... .............,我試過使用線程,For循環迭代,如何在按鈕中使用Progressbar而不使用BackGroundworker
0
A
回答
2
快速回答非常接近「你不能」。
較長的答案是:
理論上你可以簡單地啓動一個進度條,然後對()循環中更新。
但是,這在實踐中並不奏效。原因是當你在你的循環中時,你的應用程序是「繁忙的」,並且它不響應來自操作系統的窗口消息。操作系統會注意到這一點,並決定你沒有反應,所以它會拍攝一個窗口的快照。從那時起,無論何時更新進度條,操作系統都會顯示快照而不是當前狀態,因此就用戶而言,進度條移動到(例如)35%,然後剛剛「卡住」 。這完全擊敗了進度條!
要解決這個問題,您的UI線程必須處理消息。有兩種方法可以完成。
1)爲處理作業使用單獨的線程,並要求UI線程更新進度欄。這是「背景工作者」的方法,它運作良好。
2)您可以在固定的for()循環內調用Application.DoEvents()。這可以讓您在「忙碌」時發送消息,從而避免出現問題。但是,這是非常危險的,因爲處理消息會導致重新調用您的代碼(例如,如果您單擊「開始」按鈕開始處理,用戶將能夠再次單擊「開始」,然後嘗試執行處理中的一些處理)。爲了解決這個問題,你必須非常小心,安裝一個MessageFilter來確保你在這個上下文中只處理「安全」消息。除非你真的知道你在做什麼,否則不要嘗試這種方法。
因此,只有一種實用方法:使用BackgroundWorker(或您自己的線程)。有很多關於如何在網絡上做這個的教程,所以我不會在這裏詳細說明這個方法。
相關問題
- 1. 使用progressBar而不是ProgressDialog
- 2. 使用backgroundWorker創建並顯示progressBar - VS2013
- 3. 使用backgroundworker更新progressbar + clipboard.getimage() - WPF C#
- 4. 如何在使用BackgroundWorker時向ProgressBar報告?
- 5. 使用DataTable按鈕而不使用DataTable
- 6. 如何使用自定義按鈕,而不是jQuery UI按鈕?
- 7. 如何使用ProgressBar更新正確實現BackgroundWorker?
- 8. 在WPF中將BackgroundWorker與ProgressBar結合使用
- 9. 如何在Struts2中使用錨而不是提交按鈕?
- 10. 如何在HTML中使用鏈接而不是按鈕?
- 11. 如何在Matlab中使用靜態文本而不是按鈕?
- 12. 如何使用BackgroundWorker?
- 13. progressbar將不會更新backgroundworker?
- 14. 如何在MVVM中使用Progressbar
- 15. 如何在使用錨點而不是按鈕時防止按鈕混搭?
- 16. 如何在C#中使用BackgroundWorker#
- 17. 如何在瀏覽器中使用backgroundworker?
- 18. 如何在iOS控制中心使用停止按鈕而不是使用快捷鍵暫停按鈕
- 19. 如何在JQuery Mobile Framework中使用圖標(不使用按鈕)
- 20. 如何將ProgressBar放入按鈕中
- 21. ProgressBar與WPF中的BackgroundWorker
- 22. C#Winform ProgressBar和BackgroundWorker
- 23. 如何驗證表單,而不使用禁用按鈕
- 24. 使用按鈕而不是提交
- 25. 如何啓用/禁用Backgroundworker DoWork事件中的按鈕?
- 26. 使用按鈕而不是href在symfony2中調用操作
- 27. 如何使ProgressBar在Android中不確定
- 28. 如何使用委託BackgroundWorker?
- 29. 如何在onlick過程中使用「this」來引用Class而不是HTML按鈕?
- 30. Android:在ProgresDialog中使用ProgressBar
你能詳細闡述一下你想達到的更多的東西嗎?通過給定的細節,我得到你想顯示進度條上點擊一個按鈕,我是正確的! – Malcolm 2010-05-18 07:22:35