for a=0 to 1000
lable.text=a
next
以上循环不更新拉布勒的文本状态,而循环运行时,它只是在最后更新for循环,但我尝试使用vb6.0它可以通过使用Do事件。 但我不知道vb2010 beta 2中的函数是什么。 plz帮我解决了这个问题。是什么功能,我可以使用,而不是办赛事(在VB6.0中使用)在(vb2010)
for a=0 to 1000
lable.text=a
next
以上循环不更新拉布勒的文本状态,而循环运行时,它只是在最后更新for循环,但我尝试使用vb6.0它可以通过使用Do事件。 但我不知道vb2010 beta 2中的函数是什么。 plz帮我解决了这个问题。是什么功能,我可以使用,而不是办赛事(在VB6.0中使用)在(vb2010)
你的问题不是很清楚,但我会尽力解释我的理解。循环实际上更新它,但它发生得太快,只能看到最终值。我不知道sleep()
方法的VB equilevant,但你应该能够很快在网上找到它。
它不是文本没有变化,但是每次循环时它都会被覆盖。如果要在标签中显示0到1000,则必须附加该值。
你需要改变你对这类问题在.NET的方式 - 的DoEvents是处理在VB缺乏线程的,有用的,但不是一个很好的解决黑客攻击。
要运行的处理器密集型任务,同时保持响应,您需要使用多线程的UI,您揭开序幕,密集的工作在一个单独的线程和更新在主线程的UI。要做到这一点
最简单方法是使用BackgroundWorker类http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(VS.100).aspx
你的循环会提高,你的UI代码将使用更新标签ReportProgress事件。
可以在.NET中使用Application.DoEvents()
- 但你真的可能不应该。它会导致各种奇怪的行为,这将成为调试的噩梦。我已经看到按钮的OnClick事件触发,当按钮被禁用(作为一个例子),并最终追溯到调用DoEvents()。
如果你的目标其实只是计算和更新标签 - 使用Timer
。
如果你正在做有意义的工作 - 你应该看看多线程。
的BackgroundWorker
类,这个十分简单 - 你可以把它汇报进展和更新控制。如果您不使用旧版本的.NET Framework,则也可以使用Task
。
说了这一切 - 不管你采取什么方法 - 你将无法看到任何东西在一个循环中,就像你在你的例子提供。它只会发生得太快(除非您使用计时器并适当设置Tick值)。
使用定时器的示例 最简单的方法是在窗体设计器中 - 将定时器组件(在组件组下)拖到窗体上。您可以编辑属性并给它一个合适的名称,并将Tick值设置为500(即以毫秒为单位的时间间隔)。将启用值设置为True。
现在单击计时器控件,并拉起属性窗口。点击事件图标并双击Tick
文本框。这应该为您创建默认处理程序。
修改代码看起来像这样:
Private A As Integer
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
' Update the text
Label1.Text = A.ToString
A += 1
' Stop the timer
If A >= 1000 Then
Timer1.Enabled = False
End If
End Sub
是不是很好用Application.Doevents。更好地使用Control.Update Bye – 2013-03-09 16:36:46