在(vb2010)中我可以使用什么功能代替Do事件(在vb6.0中使用)

时间:2010-01-27 13:34:39

标签: vb.net vb6

for a=0 to 1000
lable.text=a
next

上面的循环不会更新lable的文本状态,而循环正在运行,它仅在for循环结束时更新,但我尝试使用vb6.0,可以使用Do事件。 但我不知道vb2010 beta 2中的功能是什么。 PLZ帮我解决了这个问题。

5 个答案:

答案 0 :(得分:1)

你可以尝试

Application.DoEvents()

甚至

lable.Refresh()

答案 1 :(得分:1)

你需要改变你在.NET中思考这类问题的方式 - DoEvents是一个解决VB缺乏线程的黑客,有用但不是一个好的解决方案。

要在保持UI响应的同时运行处理器密集型任务,您需要使用多线程,您可以在单独的线程中启动密集型工作并更新主线程中的UI。

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

您的循环将引发您的UI代码将用于更新标签的ReportProgress事件。

答案 2 :(得分:1)

您可以在.Net中使用Application.DoEvents() - 但您可能不应该这样做。它可能导致各种奇怪的行为,这将是调试的噩梦。我已经看到按钮的OnClick事件在禁用按钮时触发(作为示例)并最终将其追溯到调用DoEvents()。

如果您的目标只是计算和更新标签 - 请使用Timer

如果你正在做有意义的工作 - 你应该研究多线程。

BackgroundWorker课程让这很简单 - 您可以让它报告进度并更新您的控件。如果您不使用旧版本的.NET Framework - 您也可以使用Task

说完了所有这些 - 无论你采用什么方法 - 你将无法在你的例子中提供的环路中看到很多东西。它只会发生得太快(除非您使用计时器并适当设置Tick值)。

使用计时器的示例 最简单的方法是在表单设计器中 - 将计时器组件(在“组件”组下)拖到表单上。您可以编辑属性并为其指定适当的名称,并将Tick值设置为500(即以毫秒为单位的刻度间隔)。将Enabled值设置为True。

现在单击Timer控件,然后拉出Properties窗口。单击“事件”图标,然后双击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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

相关问题