Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Последовательность выполнения событий в net Добавлено: 20.09.12 10:37  

Автор вопроса:  ---Fix--- | ICQ: 348680795 
Есть класс
Public Class clsTimer
    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
Покажи исходный код класса clsKeyActions

  1.  
  2. Public Class clsKeyActions
  3.     Inherits System.Collections.ObjectModel.Collection(Of clsKeyAction)
  4.  
  5. End Class
  6.  
  7. Public Class clsKeyAction
  8.  
  9.     Public Enum eMethod
  10.         EnterKey = 0
  11.         ChooseSlot = 1
  12.         Message = 2
  13.     End Enum
  14.  
  15.     Public fOutputString As String
  16.     Public fDelay As Integer
  17.     Public fMethod As eMethod
  18.  
  19.     Public Sub New(Optional ByVal pOutputString As String = "a", Optional ByVal pDelay As Integer = 50, Optional ByVal pMethod As eMethod = eMethod.EnterKey)
  20.         fOutputString = pOutputString
  21.         fDelay = pDelay
  22.         fMethod = pMethod
  23.     End Sub
  24.  
  25.     Public Property Action As eMethod
  26.         Set(ByVal value As eMethod)
  27.             fMethod = value
  28.         End Set
  29.         Get
  30.             Return fMethod
  31.         End Get
  32.     End Property
  33.  
  34.     Public Property Parameter As String
  35.         Set(ByVal value As String)
  36.             fOutputString = value
  37.         End Set
  38.         Get
  39.             Return fOutputString
  40.         End Get
  41.     End Property
  42.  
  43.     Public Property Delay As Integer
  44.         Set(value As Integer)
  45.             fDelay = value
  46.         End Set
  47.         Get
  48.             Return fDelay
  49.         End Get
  50.     End Property
  51. End Class
  52.  


Пока тут пусто, но я наследую 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
обычно от List<T> наследуются а не от Collection<T>

Я так раньше и делал, но когда нужно делать дополнительные действия при добавлении, удалении элементов перегружать методы и расширять класс проще в Collection<T>, а особых отличий я вроде не нашел между ними.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам