我正在使用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