Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им
Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им
'-----------------------------------------
'Для активизации контроля запуска событий:
' #Const EVENTINSTRUMENTATION = 1
'Для отмены контроля запуска событий:
' #Const EVENTINSTRUMENTATION = 0
'-----------------------------------------
#Const EVENTINSTRUMENTATION = 1
'-----------------------------------------------------------------------
'Флаг, указывающий обработчикам событий, должен ли из них осуществляться
'выход без выполнения каких-либо действий
'-----------------------------------------------------------------------
Private m_userInterfaceUpdateOccuring As Boolean
'Счетчики событий
Private m_radioButton1ChangeEventCount As Integer
Private m_textBox1ChangeEventCount As Integer
'-------------------------------------------------------------------------
'Код, который следует включать лишь в том случае, если приложение
'выполняется в режиме контроля запуска событий. Этот код характеризуется
'относительно высокими накладными расходами, и его следует компилировать и
'выполнять только тогда, когда выполняется диагностика.
'-------------------------------------------------------------------------
#If EVENTINSTRUMENTATION <> 0 Then
Private m_instrumentedEventLog As System.Collections.ArrayList
'----------------------------------------------------------------------
'Заносит записи о возникновении событий в массив, который мы
'можем просмотреть
'Примечание: Не делается никаких попыток ограничить размерность массива
' регистрационных записей, поэтому, чем дольше выполняется приложение,
' тем больше становится размер массива
'----------------------------------------------------------------------
Private Sub instrumented_logEventOccurrence(ByVal eventData _
As String)
'Создать журнал событий, если он еще не был создан
If (m_instrumentedEventLog Is Nothing) Then
m_instrumentedEventLog = _
New System.Collections.ArrayList
End If
'Зарегистрировать событие
m_instrumentedEventLog.Add(eventData)
End Sub
'----------------------------------------------------------
'Отобразить список возникших событий
'Примечание: Этот вариант реализации довольно груб.
' Целесообразнее отображать список событий
' в отдельном диалоговом окне, которое специально выводится
' для этого на экран.
'----------------------------------------------------------
Private Sub instrumentation_ShowEventLog() Dim listItems As _
System.Windows.Forms.ListBox.ObjectCollection
listItems = listBoxEventLog.Items
'Очистить список элементов
listItems.Clear()
'При отсутствии событий - выход
If (m instrumentedEventLog Is Nothing) Then
listItems.Add("0 событий")
Return
End If
'Отобразить поверх списка общее количество
'подсчитанных нами событий
listItems.Add(m_instrumentedEventLog.Count.ToString() + _
" событий")
'Перечислить элементы списка в обратном порядке, чтобы
'первыми отображались самые последние из них
Dim logItem As String
Dim listIdx As Integer
For listIdx = _
m_instrumentedEventLog.Count - 1 To 0 Step -1
logItem = CStr(m_instrumentedEventLog(listIdx))
listItems.Add(logItem)
Next
End Sub
#End If
'------------------------------------------------------
'Событие изменения состояния переключателя RadioButton1
'------------------------------------------------------
Private Sub RadioButton1_CheckedChanged(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles RadioButton1.CheckedChanged
'Если обновление данных в пользовательском интерфейсе осуществляется
'приложением, то мы не хотим обрабатывать его так же, как если бы
'это событие было запущено пользователем. Если это именно так,
'то осуществить выход из функции без выполнения каких-либо действий.
If (m userInterfaceUpdateOccuring = True) Then
Return
End If
'Подсчитать, сколько раз выполнена обработка данного события
m_radioButtonlChangeEventCount = _
m_radioButtonlChangeEventCount + 1
#If (EVENTINSTRUMENTATION <> 0) Then
'Зарегистрировать наступление события
instrumented_logEventOccurrence("radioButton1.Change:" + _
m_radioButton1ChangeEventCount.ToString() + ":" + _
RadioButton1.Checked.ToString()) 'value
#End If
End Sub
'-------------------------------------------------------------
'Событие щелчка на кнопке Button1
'Имитирует обновление пользовательского интерфейса программным
'кодом, что может приводить к запуску обработчика события
'-------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Указать на то, что мы не хотим, чтобы обработчики сразу же
'обрабатывали события, поскольку мы обновляем
'пользовательский интерфейс.
'm_userInterfaceUpdateOccuring = true;
RadioButton1.Checked = True
TextBox1.Text = "Hello World"
'Обновление пользовательского интерфейса закончено
m_userInterfaceUpdateOccuring = False
End Sub
'------------------------------------------------------------------
'Обработчик события изменения состояния элемента управления TextBox
'------------------------------------------------------------------
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged
'Если обновление данных в пользовательском интерфейсе осуществляется
'приложением, то мы не хотим обрабатывать его так же, как если бы
'это событие было запущено пользователем. Если это именно так,
'то осуществить выход из функции без выполнения каких-либо действий.
If (m_userInterfaceUpdateOccuring = True) Then
Return
End If
'Подсчитать, сколько раз выполнена обработка данного события
m_textBox1ChangeEventCount = m_textBox1ChangeEventCount + 1
#If EVENTINSTRUMENTATION <> 0 Then
'Занести событие в журнал
instrumented_logEventOccurrence("textBox1.Change:" + _
m_textBoxlChangeEventCount.ToString() + ":" + _
TextBox1.Text.ToString()) 'Value
#End If
End Sub
Private Sub buttonShowEventLog_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles buttonShowEventLog.Click
#If EVENTINSTRUMENTATION <> 0 Then
instrumentation_ShowEventLog()
#End If
End Sub
- Листинг 11.1. Заполнение данными и очистка от них элементов управления TreeView с использованием альтернативных стратегий
- Листинг 11.2. Динамическое заполнение данными элемента управления TreeView
- Листинг 11.3. Запуск обработчика событий при изменении содержимого элемента TextBox программным путем
- Листинг 11.4. Использование модели состояний для обновления интерфейса и контроль запуска событий с целью более глубокого изучения процесса обработки событий и управления им
- Листинг 11.5. Вызов метода Update() элемента управления для отображения пояснительного текста, информирующего о ходе выполнения задачи
- Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
- Листинг 11.7. Создание объекта Graphics для формы
- Листинг 11.8. Подключение к функции Paint формы
- Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
- Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
- Листинг 11.11. Три полезных способа кэширования графических ресурсов
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Восстановление с использованием инструмента gbak
- Сущность процесса миграции
- Основные "рычаги" управления производительностью
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- V Совершенствование процесса
- Типы страниц и их использование
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- Использование констант
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса