Страница: 1 |
Страница: 1 |
Вопрос: Последовательность выполнения событий в net
Добавлено: 20.09.12 10:37
Автор вопроса: ---Fix--- | ICQ: 348680795
Есть класс
Inherits System.Timers.Timer
Public CurrentCollection As clsKeyActions
Public CurrentAction As Integer
Public Sub New()
MyBase.Interval = 1
End Sub
Public Overloads Property Enabled As Boolean
Get
Return MyBase.Enabled
End Get
Set(value As Boolean)
MyBase.Enabled = value
If value = True Then
CurrentAction = 0
MyBase.Interval = CurrentCollection(CurrentAction).fDelay
End If
End Set
End Property
Private Sub clsTimer_Elapsed(sender As Object, e As System.Timers.ElapsedEventArgs) Handles Me.Elapsed
Debug.Print("My sub is raised")
CurrentAction += 1
If CurrentAction >= CurrentCollection.Count Then
MyBase.Enabled = False
Else
'MyBase.Enabled = False
MyBase.Interval = CurrentCollection(CurrentAction).fDelay
'MyBase.Enabled = True
End If
End Sub
End Class
и код на форме
Public WithEvents tmrEngine As New clsTimer()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler tmrEngine.Elapsed, AddressOf tmrEngine_Tick
End Sub
Public Sub tmrEngine_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Debug.Print("Handler in form is raised")
End Sub
в моем случае первым выполняется событи в классе а потом на форме. Как узнать всегда ли будет такая последовательность, и как бы узнать не опытным путем а научным?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 20.09.12 13:02
Покажи исходный код класса clsKeyActions. Это что обычный типизированная коллекция? дженерики вроде как еще в версии 2.0 появились
Последовательность будет такой всегда, так как привязка Handles в данном случае срабатывает в конструкторе класса, до того как кто-то другой может получить возможность подписываться на событие.
Но технически порядок можно изменить - через Reflection получить ссылку на метод clsTimer_Elapsed, создать делегат на его основе, и отписать этот метод от события. Тогда этот метод вообще срабатывать не будет. Ну и можно заново подписать - тогда он будет срабатывать, но уже в другом порядке.
Номер ответа: 2
Автор ответа:
---Fix---
ICQ: 348680795
Вопросов: 12
Ответов: 33
Профиль | | #2
Добавлено: 20.09.12 15:02
Пока тут пусто, но я наследую System.Collections.ObjectModel.Collection, чтобы в дальшнейшем в коллекии использовать собственный поиск по её элементам.
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 20.09.12 18:32
обычно от List<T> наследуются а не от Collection<T>
Номер ответа: 4
Автор ответа:
---Fix---
ICQ: 348680795
Вопросов: 12
Ответов: 33
Профиль | | #4
Добавлено: 21.09.12 09:34
Я так раньше и делал, но когда нужно делать дополнительные действия при добавлении, удалении элементов перегружать методы и расширять класс проще в Collection<T>, а особых отличий я вроде не нашел между ними.