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