Динамическая обработка событий
В программе используется полезный метод GetCommandLineArgs класса System.Environment. Как упоминалось в главе 3, этот метод возвращает массив аргументов командной строки. Начальный элемент массива содержит имя исполняемого файла; поскольку индексация массива начинается с 0, для получения первого аргумента используется вызов System.Environment.GetComman3LineArgs(l), однако предварительно необходимо убедиться в существовании аргументов командной строки, для чего проверяется длина массива System.Environment.GetCommandLineArgs.
Перед запуском программы перейдите на страницу Configuration Properties диалогового окна Project Properties и укажите аргументы командной строки для тестирования.
Ниже приведен полный исходный текст программы:
Option Strict On Module Modulel Private m_EventGenerator As EventGenerator Sub Main() m_EventGenerator= New EventGenerator() Dim commandLinesOAs String = System.Environment.GetCommandLineArgs If commandLines.Length = 1 Then MsgBox("No command argument.program ending!") Environment.Exit(-l) Else Dim theCommand As String = commandLines(l) Console.WriteLine("Thecommand lineoption is" StheCommand) ' Проверить параметр командной строки и назначить ' соответствующий обработчик события. Select Case theCommand Case "first" AddHandler m_EventGenerator.TestEvent. AddressOf m_EventGenerator_TestEvent1 Case "second" AddHandler m_EventGenerator.TestEvent,_ AddressOf m_EventGenerator_TestEvent2 Case Else AddHandler m_EventGenerator.TestEvent. AddressOf m_EventGenerator_TestEventDefault End Select ' Инициировать события m_EventGenerator.TriggerEvents() End If Console.WriteLine("Press enter to end.") Console. ReadLine() End Sub 'Обработчик по умолчанию для непустой командной строки Public Sub m_EventGenerator_TestEventDefault(_ ByVal sender As Object.ByVal evt As EventArgs) System.Console.WriteLine("Default choice " & _ m_EventGenerator.GetDescri pti on()) End Sub ' Обработчик 12 для строки "first" Public Sub m_EventGenerator_TestEvent1(_ ByVal sender As Object.ByVal evt As EventArgs) System.Console.WriteLineC'lst choice " & _ m_EventGenerator.GetDescription()) End Sub 'Обработчик 13 для строки "second" Public Sub m_EventGenerator_TestEvent2( ByVal sender As Object.ByVal evt As EventArgs) System.Console.WriteLinet"2nd choice " & _ m_EventGenerator.GetDescri pti on ()) End Sub End Module Public Class EventGenerator ' В классе определяется только одно событие Public Event TestEvent(ByVal sender As Object, ByValevt As EventArgs) ' Также можно было использовать конструктор по умолчанию Public Sub New() ' Пустой конструктор End Sub .Public Function GetDescription() As String Return "EventGenerator class" End Function ' Процедура вызывается для инициирования событий Public Sub TriggerEvents() Dim e As System.EventArgs = New System.EventArgs() RaiseEvent TestEvent(Me.e) End Sub End Class