2010-01-27 28 views

回答

0

你的问题不是很清楚,但我会尽力解释我的理解。循环实际上更新它,但它发生得太快,只能看到最终值。我不知道sleep()方法的VB equilevant,但你应该能够很快在网上找到它。

0

它不是文本没有变化,但是每次循环时它都会被覆盖。如果要在标签中显示0到1000,则必须附加该值。

1

你需要改变你对这类问题在.NET的方式 - 的DoEvents是处理在VB缺乏线程的,有用的,但不是一个很好的解决黑客攻击。

要运行的处理器密集型任务,同时保持响应,您需要使用多线程的UI,您揭开序幕,密集的工作在一个单独的线程和更新在主线程的UI。要做到这一点

最简单方法是使用BackgroundWorker类http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(VS.100).aspx

你的循环会提高,你的UI代码将使用更新标签ReportProgress事件。

1

可以在.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 
相关问题