我是一个VB6编码和我正在迁移到VB8/VB.NET等待在VB2008/vb.net
我知道如何在VB6等待,但我的问题是,我不知道如何在VB8/VB.NET中等待。我有一个名为textbox2
的TextBox
,其中包含我想等待的秒数。我曾经在VB6中使用wait 60
,但当然VB2008是不同的。
任何人都可以帮助我做到这一点?
我是一个VB6编码和我正在迁移到VB8/VB.NET等待在VB2008/vb.net
我知道如何在VB6等待,但我的问题是,我不知道如何在VB8/VB.NET中等待。我有一个名为textbox2
的TextBox
,其中包含我想等待的秒数。我曾经在VB6中使用wait 60
,但当然VB2008是不同的。
任何人都可以帮助我做到这一点?
使用Thread.Sleep
:
Thread.Sleep(60000)
更新,以下评论:
要检索并转换成文本框中使用的值:
Dim sleepValue As Integer = Integer.Parse(textbox2.Text)
这将抛出一个异常如果该值无法转换。
我不知道为什么你要它,为什么你不使用线程,但在VB6这sleep
功能的行为类似wait
:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
MsgBox("begin")
Sleep(2000)
MsgBox("end")
End Sub
[编辑:我重新阅读问题。看到有人专门问名为textbox2
一个TextBox
所以我已经更新了答案,以反映]
嗯,我想一个答案是使用:
System.Threading.Thread.Sleep(Int32.Parse(textbox2.Text) * 1000);
如果您的文本框包含等待的秒数。但是,如果您不在后台线程中,则会在您等待的时间内挂起应用程序。
你也可以这样做:
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一些更多的细节。)要做到这一点,你
代码:
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
当你不知道参数的类型时,你也可以使用'Convert'对象,例如'Convert.ToInt32(txtMyTextBox.Text)'做转换 – shelleybutterfly
如果你需要的代码为(textbox2.Text)'或'Convert.ToInt32(textbox2.Text)' – shelleybutterfly
System.Threading.Thread.Sleep(Int32.Parse(textbox2.Text)* 1000); – nick
使用这个做那个你的用户界面不会挂起。
For i = 1 to 300
threading.thread.sleep(i * 1000)
application.doevents
next
取决于DoEvents调用需要多长时间,但这可能需要比300秒长得多的时间。 – shelleybutterfly
我想要两个等待文本框2中有多少秒 – nick
尝试使用计时器
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim interval As Integer = 0
If Integer.TryParse(Me.TextBox2.Text, interval) Then
Timer1.Enabled = True
Timer1.Interval = interval
Timer1.Start
End If
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
'your code here
End Sub
在“计时器事件蜱然后实现调用方法Timer.Stop()的逻辑,但是这取决于你怎么做。
问候。
我知道这是一个古老的问题,但我认为有这么多冲突的答案,我认为我使用的解决方案非常简单和直接。 另外,出于与OP相同的原因,我从VB6切换到.net时写了这个。
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
等待在一个GUI应用程序是一个相当大的禁止。使用计时器进行延期操作。 –
@nick请花点时间,并尝试阅读答案,然后再次发布相同问题。在你问另外两个人怎么做之前,我已经给你如何在我的答案中获得TextBox的内容。我给出了三种不同的可能的答案,如何等待,提到第一个会挂起,然后反正你试了一下,并报告:惊讶,它挂起。然而,我的帖子的* rest *有两个* other *选项:等待While和使用Application.DoEvents和System.Timers.Timer的小型Sleep。慢慢来。你的答案都在那里。 – shelleybutterfly