.net NET中的事件

.net NET中的事件,.net,vb.net,.net,Vb.net,在.NET中,VB6的DoEvents的等价物是什么 编辑: 我有一艘潜艇,它的工作需要很长时间。(它有一段时间)当我调用它时,窗体变为白色。在VB6中,我曾经在方法中放置DoEvents(在其do while中)以防止出现这种情况。应该是您要查找的 但是,请注意以下事项(从链接的MSDN页面): 与Visual Basic 6.0不同,DoEvents 方法不调用线程。Sleep 方法 更新 考虑到这些问题现在提供了用法的解释,我想说重构以使用后台线程将是一个更好的解决方案。DoEvents可

在.NET中,VB6的DoEvents的等价物是什么

编辑:

我有一艘潜艇,它的工作需要很长时间。(它有一段时间)当我调用它时,窗体变为白色。在VB6中,我曾经在方法中放置DoEvents(在其do while中)以防止出现这种情况。

应该是您要查找的

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

与Visual Basic 6.0不同,DoEvents 方法不调用线程。Sleep 方法

更新 考虑到这些问题现在提供了用法的解释,我想说重构以使用后台线程将是一个更好的解决方案。DoEvents可能会导致一些问题,因为它会导致底层消息队列泵送,从而导致重新进入和一系列其他副作用。DoEvents有有效的用例,我不想说它的使用是不好的做法——它的存在是有正当理由的——但在大多数情况下,有比只调用DoEvents更好的解决方案。

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



为了响应您的编辑,您需要做的是创建一个。这将保持主(GUI)线程空闲,允许它重新绘制并正常运行。Web上有很多教程,包括./P>< P>其他答案是正确的,如果需要使用doEvsTs(),请考虑使用ButoWorkWorkor或控件。99%的时间DoEvents()表示有一些肮脏的黑客行为

对于那些认为恶行是邪恶的人,用这个代替:

System.Windows.Forms.Application.ThreadContext.FromCurrent.RunMessageLoop(2,Nothing)

最简单的方法是:

Application.DoEvents()


因此,您可以调用
DoEvents

+1。我同意;每当我在.NET代码中看到或听到DoEvents时,我都会看到一个警告标志,表明存在需要注意的设计问题。我见过很多使用DoEvents的游戏循环。在这种情况下,这似乎不是一个完全糟糕的想法。也可以考虑后台工作人员而不是DoEvices。DoEvts(有很好的理由)被认为是一个糟糕的练习。我不认为它被认为是不好的练习——它在错误的情况下是坏的,我当然会认为它是一种代码气味,但它是合法使用的。如果不恰当地使用,并且不了解正在发生的事情,它是唯一的邪恶。不知道Windows如何发送消息不是借口,为了避免学习而产生新线程也同样糟糕。