3

如果我正在循环执行长时间的操作(例如,处理文件)并且我想更新进度条,我需要使用 DoEvents,据我所知。

但是在函数的每个循环中调用它只会导致进度条的动画播放得非常快(或慢,取决于操作)。我知道这是因为 DoEvents 允许进度条“呼吸”,因为缺少更好的词,导致它和表单的其余部分刷新。

我的问题是,你怎么知道调用 DoEvents 是合适的?显然,您不能随心所欲地调用它 - 通常您会喜欢它 - 这会导致零星的动画等等。那么是否有一些快速的方法来检查表单/应用程序是否需要调用 DoEvents?

4

3 回答 3

8

哦,呃——我只是打了自己一巴掌。

我应该只使用后台线程来处理,而不要理会 UI 线程。

于 2010-11-07T23:00:26.190 回答
1

您可以使用BackgroundWorker ,而不是搞乱线程。它简化了在窗体上执行工作和更新控件,因为您不能直接从非 UI 线程更新 UI 控件。文档中的示例更新了 Label 控件,但您可以轻松地将其修改为使用 ProgressBar。

于 2010-11-08T01:35:39.147 回答
1

如果您不想摆弄线程并且不介意进行一些 beta 测试,那么Visual Studio Async CTP可能值得一看——它基本上是“ DoEvents done the right way ”(以及更多)。

有关这些新的异步功能的介绍,我建议您查看Eric Lippert 的博客

于 2010-11-07T23:14:52.723 回答