2012-07-12 4 views
0

je suis arrivé ce code dans VB6fonction 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 

Comment puis-je convertir en vb.net? J'ai essayé de cette façon mais ça ne marche pas.

Où est l'erreur?

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 

Merci

Répondre

0

Je pense que ce qui suit est la meilleure conversion du code d'origine (subtilement différente de andygrips réponse):

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 

Notez cependant que l'utilisation de DoEvents dans .NET est préférable d'éviter tout à fait

+0

Avez-vous une suggestion pour remplacer DoEvents? – yonghan79

+0

@ yonghan79 Vous devez jeter un coup d'oeil dans le multi threading - vérifiez la [classe BackGroundWorker] (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) –

+0

Merci, je vais Essayez-le.Par la façon dont cela vous dérange de jeter un oeil à mon code, je vais envoyer le code si cela vous convient. :) J'ai essayé le sous-marin converti, il me donne une erreur, est-il possible causé par Application.DoEvents? – yonghan79

1

Il n'échapper à la While si les Now secondes égales newDate secondes. Essayez ceci:

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 

puis-je suggérer aussi que vous nommez vos méthodes en utilisant PascalCase (la première lettre du nom de la méthode est mise en majuscule).

+0

Selon les conventions de dénomination standard de Microsoft .NET, les membres privés devraient être dans camelCase, et les membres publics devraient être dans PascalCase. –

+0

Je ne crois pas que Microsoft dise réellement que vous devriez utiliser camelCase pour les membres privés, seulement que vous devriez utiliser PascalCase pour les membres du public. J'utilise PascalCase pour toutes les méthodes car je le trouve plus lisible. – andygjp

+0

@andygjp - Il y a des avantages et des inconvénients à toutes les conventions de nommage, mais à la fin la résistance est futile! –

Questions connexes