2017-03-18 90 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