2017-03-18 70 views
-2

這是我的代碼;時間減去錯誤

Option Strict On 

Public Class Form1 

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load 

    Dim Start As DateTime 
    Start = DateTime.Now 

    Threading.Thread.Sleep(22000) 

    If Date.Now.Subtract(Start).TotalMilliseconds < 28000 Then 
     Threading.Thread.Sleep(28000 - Date.Now.Subtract(Start).TotalMilliseconds) 
    End If 

End Sub 

End Class 

這裏是錯誤圖片;

http://4.1m.yt/L8KI8ST.png

+0

28000是int,TotalMilliseconds是double。你不能那樣減去。什麼是22000和28000? – NoviceProgrammer

+0

表達式的類型(整數 - 雙精度)是雙精度。使用Option Strict On實際上不合法,必須明確說明Double如何轉換爲Sleep()所需的整數值。有不止一種方法,舍入與截斷。這裏沒什麼關係,因爲你不用擔心半個毫秒的問題,只需使用'CInt()'。 –

+1

這是okey嗎? 'Threading.Thread.Sleep(28000 - CInt(Date.Now.Subtract(Start).TotalMilliseconds))' –

回答

0

Threading.Thread.Sleep可以將時間段作爲參數。

Dim Start As DateTime 
    Start = DateTime.Now 

    Threading.Thread.Sleep(22000) 

    Dim howlong As TimeSpan = TimeSpan.FromMilliseconds(Date.Now.Subtract(Start).TotalMilliseconds) 

    If howlong.TotalMilliseconds < 28000 Then 
     Threading.Thread.Sleep(TimeSpan.FromMilliseconds(28000 - howlong.TotalMilliseconds)) 
    End If 
0

這也可以在多一點閱讀的方式與時間跨度的和曾經計算差值,並與目標類轉換完成它。

Option Strict On 

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load 

     Dim Start As Date = Now 

     Threading.Thread.Sleep(New TimeSpan(0, 0, 22)) 

     Dim ElapsedSeconds As Int32 = CInt(Now.Subtract(Start).TotalSeconds) 

     If ElapsedSeconds < 28 Then 
      Threading.Thread.Sleep(New TimeSpan(0, 0, 28 - ElapsedSeconds)) 
     End If 

    End Sub 

End Class