首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET中的DoEvents

.NET中的DoEvents
EN

Stack Overflow用户
提问于 2009-05-04 14:57:32
回答 5查看 40.2K关注 0票数 10

在.NET中相当于VB6的DoEvents是什么?

编辑:

我有一个Sub,它需要很长时间才能完成工作。(它有一个do-while)当我调用它时,表单变成白色。在VB6中,我常常在方法中(在它的do-while中)放入一个DoEvents来防止这种情况发生。

EN

回答 5

Stack Overflow用户

发布于 2009-05-04 15:01:10

在.NET中,DoEvents是正确的解决方案的案例很少(如果有的话)。如果你发布一点你正在做的事情,我们可能会有一些建议来替代它。

为了响应您的编辑,您需要做的是创建一个BackgroundWorker。这将使您的主(GUI)线程保持空闲,允许它重新绘制并正常运行。网上有很多关于这方面的教程,包括this one

票数 28
EN

Stack Overflow用户

发布于 2009-05-04 14:58:35

Application.DoEvents()应该是你要找的东西。

但是,请注意以下内容(从链接的MSDN页面):

与Visual basic6.0不同,DoEvents方法不调用Thread.Sleep方法。

更新

鉴于问题现在提供了用法的解释,我认为使用后台线程进行重构将是更好的解决方案。DoEvents可能会导致一些问题,因为它会导致底层消息队列抽出,这可能会导致重新进入和许多其他副作用。DoEvents有有效的用例,我不会说它的使用是一种糟糕的做法--它的存在是有正当理由的--但在大多数情况下,有比仅仅调用DoEvents更好的解决方案。

票数 18
EN

Stack Overflow用户

发布于 2009-05-04 15:39:10

其他答案是正确的,附注:如果需要使用DoEvents(),请考虑使用BackgroundWorker或Control.Invoke。99%的时间里,DoEvents()表示某种肮脏的黑客行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/820471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档