Страница: 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>, а особых отличий я вроде не нашел между ними.