2012-07-12 87 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