我有一个简单的代码,用于查找文本文件,读取文本行,用分号分割字符串,然后发布结果。
完成此操作后,我创建了一个非常简单的while循环,在再次使用之前浪费了10秒....这里是代码:
Private Sub checkTemps()
While Abort = False
Try
fileReader = New StreamReader(directory.Text & "currentTemp.dat")
rawData = fileReader.ReadLine()
fileReader.Close()
Dim dataArray() As String
dataArray = rawData.Split(";")
updateOutput("1", dataArray(0), dataArray(1))
updateOutput("2", dataArray(2), dataArray(3))
updateOutput("3", dataArray(4), dataArray(5))
updateOutput("4", dataArray(6), dataArray(7))
stpWatch.Start()
While stpWatch.Elapsed.Seconds < 10 And Abort = False
pollInterval(stpWatch.ElapsedMilliseconds)
End While
stpWatch.Stop()
stpWatch.Reset()
Catch ex As Exception
msgbox("oops!")
End Try
End While
closeOnAbort()
End Sub
但是当它进入“浪费时间”的循环时 - 它似乎会减慢整个应用程序的速度?而我无法理解为什么!
所以有几个问题......是否有更好的方法可以做到这一切?第二 - 有人能发现问题吗?
所有其他命令似乎运行正常 - 此应用程序没有太多其他内容。我有另一个程序用值更新dat文件,这只是一个输出温度的客户端应用程序。
任何帮助都将不胜感激。
安德鲁
更多信息:
我应该解释pollInterval子做什么!
Private Delegate Sub pollIntervalDelegate(ByVal value As Integer)
Private Sub pollInterval(ByVal value As Integer)
If Me.InvokeRequired Then
Dim upbd As New pollIntervalDelegate(AddressOf pollInterval)
Me.Invoke(upbd, New Object() {value})
Else
ProgressBar1.Value = value
End If
End Sub
答案 0 :(得分:2)
你的循环是一个非常紧凑的循环,不断调用pollInterval
。这将占用应用程序,直到满足循环条件。
您应该使用Sleep
方法暂停此线程所需的时间。
如果您想显示进度(根据您的更新),您可以将Sleep
放入循环并一次睡眠1秒(或半秒?):
While stpWatch.Elapsed.Seconds < 10 And Abort = False
Sleep(1000) <-- NOT 100% sure of the syntax here,
but the time is specified in milliseconds
pollInterval(stpWatch.ElapsedMilliseconds)
End While
答案 1 :(得分:0)
你应该选择
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10).TotalMilliseconds);