在.NET中相当于VB6的DoEvents是什么?
编辑:
我有一个Sub,它需要很长时间才能完成工作。(它有一个do-while)当我调用它时,表单变成白色。在VB6中,我常常在方法中(在它的do-while中)放入一个DoEvents来防止这种情况发生。
发布于 2009-05-04 15:01:10
在.NET中,DoEvents是正确的解决方案的案例很少(如果有的话)。如果你发布一点你正在做的事情,我们可能会有一些建议来替代它。
为了响应您的编辑,您需要做的是创建一个BackgroundWorker。这将使您的主(GUI)线程保持空闲,允许它重新绘制并正常运行。网上有很多关于这方面的教程,包括this one。
发布于 2009-05-04 14:58:35
Application.DoEvents()应该是你要找的东西。
但是,请注意以下内容(从链接的MSDN页面):
与Visual basic6.0不同,DoEvents方法不调用Thread.Sleep方法。
更新
鉴于问题现在提供了用法的解释,我认为使用后台线程进行重构将是更好的解决方案。DoEvents可能会导致一些问题,因为它会导致底层消息队列抽出,这可能会导致重新进入和许多其他副作用。DoEvents有有效的用例,我不会说它的使用是一种糟糕的做法--它的存在是有正当理由的--但在大多数情况下,有比仅仅调用DoEvents更好的解决方案。
发布于 2009-05-04 15:39:10
其他答案是正确的,附注:如果需要使用DoEvents(),请考虑使用BackgroundWorker或Control.Invoke。99%的时间里,DoEvents()表示某种肮脏的黑客行为。
https://stackoverflow.com/questions/820471
复制相似问题