如果我循环执行长时间操作(比如处理文件)并且我想更新进度条,我需要根据我的理解使用DoEvents。
但是在函数的每个循环中调用它只会导致进度条的动画播放速度非常快(或者很慢,具体取决于操作)。我知道这是因为DoEvents允许进度条“呼吸”,因为没有更好的单词,导致它和表单的其余部分刷新。
我的问题是,你怎么知道调用DoEvents是合适的?显然你不能只是随心所欲地调用它 - 通常你会觉得它 - 这会导致零星的动画等等。那么是否有一些快速方法来检查表单/应用程序是否需要一个名为的DoEvents?
答案 0 :(得分:8)
哦,呃 - 我只是打了自己。
我应该使用后台线程来处理,并保留UI线程。
答案 1 :(得分:1)
如果你不想弄乱线程并且不介意进行一些beta测试,Visual Studio Async CTP可能值得一看 - 它基本上是“ DoEvents以正确的方式完成“(以及更多)。
有关这些新异步功能的介绍,我建议您查看Eric Lippert's blog。
答案 2 :(得分:1)
您可以使用BackgroundWorker而不是乱用线程。它简化了执行工作和更新窗体上的控件,因为您无法直接从非UI线程更新UI控件。文档中的示例更新了Label控件,但您可以轻松修改它以使用ProgressBar。