2010-10-06 6 views
1

J'ai une classe personnalisée écrite, que j'instancier d'une procédure d'événement semblable àPourquoi A fonctionne-t-il mais pas B?

Private Sub EventHandler 
    For intForCounter = 1 to intUserEntry 
     Dim newObj As New MyClass 
     newObj.Property 
     newObj.Method() 
    Next 
End Sub 

La classe elle-même ressemble à quelque chose comme ça

Public Property Time As Date 
'First attempt: 
Dim tmeExec As New Timer 
Public Sub Method() 
    'Second Attempt 
    Dim tmeExec As New Timer 
    'A bunch of code for converting a timespan to milliseconds and storing that in intInterval 
    With tmeExec 
     .Enabled = True 
     .Interval = intInterval 
    End With 
    AddHandler tmeExec.Tick, AddressOf TickHandler 
End Sub 

Private Sub TickHandler(ByVal myObj As Object, ByVal myArgs As EventArgs) 
    Dim tmeSender As Timer = CType(myObj, Timer) 
    tmeSender.Stop() 
    'Some code here to do something 
End Sub 

Quand j'ai eu le placement de temps à l'emplacement « First Tentative ', tout a été déclenché au dernier intervalle spécifié. Mon attente est que chaque fois qu'un nouvel objet est instancié, un nouveau temporisateur aurait été instancié avec lui, et mettre ainsi l'instanciation dans la classe serait le bon chemin à parcourir. Ce n'est pas le cas.

Mais je veux savoir pourquoi il se comporte comme il le fait. Il est bon de savoir comment quelque chose fonctionne, mais si vous savez POURQUOI quelque chose fonctionne, vous ne faites pas cette gaffe à nouveau. J'ai demandé à mon professeur, mais je n'ai pas vraiment compris sa réponse aussi complètement que je le voudrais.

Répondre

0

Si vous placez l'instanciation du temporisateur en dehors de la méthode (à la première tentative), vous n'avez qu'un seul temporisateur. Chaque fois que vous appelez Method(), vous définissez simplement les propriétés du temporisateur existant et ajoutez un nouveau gestionnaire d'événement au temporisateur existant. En déplaçant l'instanciation Timer dans Method(), chaque fois que Method() est appelée, un nouvel objet Timer est créé.

+0

Eh bien, cela semble un peu contre-intuitif. Juste une chose de plus à retenir, je suppose. – Langus

Questions connexes