Почему работает А, а не В? - PullRequest
       4

Почему работает А, а не В?

1 голос
/ 06 октября 2010

У меня написан собственный класс, который я создаю из процедуры обработки событий, аналогичной

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

Сам класс выглядит примерно так

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

Когда у меня было время размещенияв расположении «Первая попытка» все сработало с указанным последним интервалом.

Я ожидаю, что каждый раз, когда создается новый объект, создается новый таймер с ним, и поэтому помещение экземпляра вкласс будет правильным путем.Это не тот случай.

Но я хочу знать, почему он ведет себя так, как он.Приятно знать, КАК что-то работает, но если вы знаете, ПОЧЕМУ что-то работает, вы больше не делаете этого глупости.Я спросил своего профессора, но не совсем понял его ответ так, как мне хотелось бы.

1 Ответ

0 голосов
/ 07 октября 2010

Если вы поместите создание экземпляра Таймера вне Метода (в «Первой попытке»), то у вас будет только один таймер. Каждый раз, когда вы вызываете Method (), вы просто устанавливаете свойства существующего таймера и добавляете новый обработчик событий в существующий таймер.

Путем перемещения экземпляра Timer в метод (), каждый раз при вызове метода () создается новый объект таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...