2010-01-08 99 views
0

我有一個簡單的代碼,查找文本文件,讀取文本行,以分號分割字符串,然後發佈結果。While循環會導致應用程序變慢?任何想法爲什麼?

它已經這樣做之後,我創建了一個非常簡單的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 

但是,當它到達「浪費時間「的循環 - 它似乎減慢了整個應用程序的速度?我無法弄清楚爲什麼!

所以有幾個問題......有沒有更好的方法來做到這一點?其次 - 任何人都可以發現問題嗎?

所有其他命令似乎運行良好 - 這個應用程序沒有太多其他的東西。我有另一個程序更新數據文件的值,這只是一個客戶端應用程序來輸出溫度。

任何幫助,將不勝感激。

安德魯


更多信息:

我應該解釋的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

另見,在相關的說明,http://stackoverflow.com/questions/1664526/loop-to-check-time-in-vb-net – VonC 2010-01-08 11:49:52

回答

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 
+0

你會建議什麼? 我希望能夠在下次更新之前使用進度條顯示剩餘時間......有更好的方法嗎? – 2010-01-08 11:49:28

0

你應該去與

System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10).TotalMilliseconds); 
+0

但我想顯示的時間長度,直到下一次刷新...如果我把線程睡覺 - 我將無法顯示這個 - 我會嗎? – 2010-01-08 11:48:40

+2

您需要定義更新間隔;在你的'while'循環中添加一個'Thread.Sleep(1000)',它會在每次屏幕更新前等待一秒鐘。 – 2010-01-08 11:51:46

+0

所以你的意思是 - 雖然stpWatch.Elapsed.Seconds <10和Abort = False | pollInterval(stpWatch.ElapsedMilliseconds)| Thread.Sleep(1000)|儘管結束 - ? – 2010-01-08 11:53:27

相關問題