首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vb2008 / vb.net中等待

在vb2008 / vb.net中等待
EN

Stack Overflow用户
提问于 2011-08-21 20:28:49
回答 6查看 3.4K关注 0票数 2

我是一名VB6程序员,我正在转向VB8 / VB.NET

我知道如何在VB6中等待,但我的问题是我不知道如何在VB8/VB.NET中等待。我有一个名为textbox2TextBox,它包含了我想要等待的秒数。我过去常常在VB6中使用wait 60,但VB2008当然不同。

有人能帮我做这件事吗?

EN

回答 6

Stack Overflow用户

发布于 2012-10-23 05:37:51

我知道这是一个古老的问题,但我认为有太多相互矛盾的答案,我认为我使用的解决方案足够简单和直接。此外,我在从VB6切换到.net时写了这篇文章,原因与OP相同。

代码语言:javascript
复制
Private Sub Wait(ByVal seconds As Long)
    Dim dtEndTime As DateTime = DateTime.Now.AddSeconds(seconds)
    While DateTime.Now < dtEndTime
        Application.DoEvents()
    End While
End Sub
票数 3
EN

Stack Overflow用户

发布于 2011-08-21 20:37:11

使用Thread.Sleep

代码语言:javascript
复制
Thread.Sleep(60000)

更新,如下评论:

要检索和转换文本框的值,请使用:

代码语言:javascript
复制
Dim sleepValue As Integer = Integer.Parse(textbox2.Text)

如果值不能转换,这将抛出异常。

票数 0
EN

Stack Overflow用户

发布于 2011-08-21 20:38:12

编辑:我重新阅读了这个问题,看到它特别询问了一个名为textbox2TextBox,所以我更新了答案以反映这一点。

好吧,我认为一个答案是使用:

代码语言:javascript
复制
System.Threading.Thread.Sleep(Int32.Parse(textbox2.Text) * 1000);

如果文本框中包含等待的秒数,则返回。但是,如果您不在后台线程中,这将使您的应用程序在您等待的时间内挂起。

你也可以这样做:

代码语言:javascript
复制
Dim StartTime As DateTime
StartTime = DateTime.Now

While (DateTime.Now - StartTime) < TimeSpan.FromSeconds(Int32.Parse(textbox2.Text))
    System.Threading.Thread.Sleep(500)
    Application.DoEvents()
End While

它不会在您等待时挂起UI。(您还可以使用Convert.Int32(textbox2.Text)来转换文本框中的数据。)

哦,在某些情况下,另一种避免UI锁定问题的方法是实现一个计时器回调。(有关更多详细信息,请参见http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx。)要执行此操作,您需要

  • 在暂停之前执行您需要执行的任何处理
  • 创建一个从您停止的地方开始处理的函数
  • 创建一个定时器在之后调用您的函数

代码:

代码语言:javascript
复制
Public Class MyClass

    Public MyTimer As System.Timers.Timer

    Public Sub OnWaitCompleted(source As Object, e As ElapsedEventArgs)
        MyTimer.Stop()
        MyTimer = Nothing
        DoSecondPartOfProcessing()
    End Sub

    Public Sub DoFirstPartOfProcessing()
        ' do what you need to do before the wait

        MyTimer = New System.Timers.Timer(Int32.Parse(textbox2.Text))
        AddHandler MyTimer.Elapsed, AddressOf OnWaitCompleted

        MyTimer.Start()
    End Sub

    Public Sub DoSecondPartOfProcessing()
        ' do what you need to do after the wait
    End Sub
End Class
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7138261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档