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