2012-07-12 93 views
0

我有在VB6的代碼VB6功能vb.net

Private Sub pause(ByVal interval As Variant) 
    Dim Current As Variant 

    Current = Timer 
    Do While Timer - Current < Val(interval) 
     DoEvents 
    Loop 
End Sub 

如何轉換在vb.net?我嘗試過這種方式,但它不起作用。

錯誤在哪裏?

Private Sub pause(ByVal interval As Single)    
     Dim newDate As Date  
     newDate = DateAndTime.Now.AddSeconds(interval) 

     While DateAndTime.Now.Second <> newDate.Second     
      Application.DoEvents()   
     End While  
End Sub 

感謝

回答

0

我認爲下面是原碼(以andygrips答案略有不同)的最佳轉換:但是

Private Sub Pause(ByVal seconds As Integer) 
    Dim current As Date 

    current = DateTime.Now 
    Do While (DateTime.Now - current).TotalSeconds < seconds 
     Application.DoEvents() 
    Loop 
End Sub 

注意,在.NET中使用的DoEvents的最好完全避免

+0

您是否有建議更換DoEvents?謝謝。 – yonghan79 2012-07-12 14:52:55

+0

@ yonghan79你需要看看多線程 - 檢查[BackGroundWorker類](http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) – 2012-07-12 15:17:04

+0

謝謝,我會試一試。順便說一下,你介意看看我的代碼,如果可以的話,我會發送代碼。 :)我已經嘗試過轉換的子,它給了我一個錯誤,是否有可能是由Application.DoEvents引起的? – yonghan79 2012-07-12 15:54:19

1

它只會逃避While如果Now秒等於newDate秒。試試這個:

Private Sub pause(ByVal interval As Single) 
     Dim waitUntil As Date = DateAndTime.Now.AddSeconds(interval) 
     While DateAndTime.Now < waitUntil 
      Application.DoEvents() 
     End While 
    End Sub 

而且我可以建議你使用PascalCase(方法名的第一個字母是大寫)命名方法。

+0

根據微軟標準的.NET命名約定,私有成員應該在camelCase中,公共成員應該在PascalCase中。 – 2012-07-12 11:57:43

+0

我不相信微軟真的說你應該爲私人成員使用camelCase,只是你應該爲公衆成員使用PascalCase。 我對所有方法都使用PascalCase,因爲我覺得它更具可讀性。 – andygjp 2012-07-12 12:37:44

+0

@andygjp - 所有命名約定都有優點和缺點,但最終阻力是徒勞的! – 2012-07-12 13:00:54