.NET中的DoEvents

10 .net vb.net

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

编辑:

我有一个Sub需要很长时间才能完成它的工作.(它有一个do-while)当我打电话给它时,表格会变成白色.在VB6中,我曾经在方法中放置一个DoEvents(在do-while内部)以防止这种情况发生.

Jon*_*n B 27

很少(如果有的话)DoEvents是.NET中正确的解决方案.如果您发布一些关于您正在做的事情,我们可能会对替代方案提出一些建议.


为了响应您的编辑,您需要做的是创建BackgroundWorker.这将使您的主(GUI)线程保持自由,允许它重新绘制并正常运行.网上有很多教程,包括这个.

  • +1.我同意; 每当我在.NET代码中看到或听到DoEvents时,我都会看到一个警告标志,表明存在设计问题需要注意. (3认同)

Jef*_*tes 18

Application.DoEvents()应该是您正在寻找的.

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

与Visual Basic 6.0不同,DoEvents方法不调用Thread.Sleep方法.

更新

鉴于问题现在提供了使用说明,我会说重构使用后台线程将是一个更好的解决方案.DoEvents可能会导致一些问题,因为它会导致底层消息队列被泵出,这可能导致重新入侵和一系列其他副作用.DoEvents有有效的用例,我会羞于说它的使用是不好的做法 - 它存在是有正当理由的 - 但在大多数情况下,除了调用DoEvents之外还有更好的解决方案.

  • 如果不恰当地使用并且不了解正在发生的事情,这只是邪恶的.无视Windows如何抽取信息是没有理由的,只是为了避免学习而产生新线程同样糟糕. (3认同)