Выбрать главу

//выполнять только тогда, когда выполняется диагностика.

//-------------------------------------------------------------------------

#if EVENTINSTRUMENTATION

private System.Collections.ArrayList m_instrumentedEventLog;

//------------------------------------------------------------------------

//Заносит записи о возникновении событий в массив, который мы

//можем просмотреть

//Примечание: Не делается никаких попыток ограничить размерность массива

// регистрационных записей, поэтому, чем дольше выполняется

// приложение, тем больше становится размер массива

//------------------------------------------------------------------------

private void instrumented_logEventOccurrence(string eventData) {

 //Создать журнал событий, если он еще не был создан

 if (m_instrumentedEventLog == null) {

  m_instrumentedEventLog = new System.Collections.ArrayList();

 }

 //Зарегистрировать событие

 m_instrumentedEventLog.Add(eventData);

}

//------------------------------------------------------------------------

//Отобразить список возникших событий

//Примечание: Этот вариант реализации довольно груб.

// Целесообразнее отображать список событий

// в отдельном диалоговом окне, которое специально выводится

// для этого на экран.

//------------------------------------------------------------------------

private void instrumentation_ShowEventLog() {

 System.Windows.Forms.ListBox.ObjectCollection listItems;

 listItems = listBoxEventLog.Items;

 //Очистить список элементов

 listItems.Clear();

 //При отсутствии событий - выход

 if (m_instrumentedEventLog == null) {

  listItems.Add("0 Events");

  return;

 }

 //Отобразить поверх списка общее количество

 //подсчитанных нами событий

 listItems.Add(m_instrumentedEventLog.Count.ToString() + " Events");

 //Перечислить элементы списка в обратном порядке, чтобы первыми

 //отображались самые последние из них

 string logItem;

 for(int listIdx = m_instrumentedEventLog.Count - 1; listIdx >= 0; listIdx--) {

  logItem=(string) m_instrumentedEventLog[listIdx];

  listItems.Add(logItem);

 }

}

#endif

//------------------------------------------------------

//Событие изменения состояния переключателя RadioButton1

//------------------------------------------------------

private void radioButton1_CheckedChanged(object sender, System.EventArgs e) {

 //Если обновление данных в пользовательском интерфейсе осуществляется

 //приложением, то мы не хотим обрабатывать его так же, как если бы

 //это событие было запущено пользователем. Если это именно так,

 //то выйти из функции без выполнения каких-либо действий.

 if (m_userInterfaceUpdateOccuring == true) {

  return;

 }

 //Подсчитать, сколько раз выполнена обработка данного события

 m_radioButtonlChangeEventCount++;

#if EVENTINSTRUMENTATION

 //Зарегистрировать наступление события

 instrumented_logEventOccurrence("radioButton1.Change:" + //Событие

  m_radioButton1ChangeEventCount.ToString() + ":" +       //Количество раз

  radioButton1.Checked.ToString());                       //Значение

#endif

//-------------------------------------------------------------

//Событие щелчка на кнопке Button1

//Имитирует обновление пользовательского интерфейса программным

//кодом, что может приводить к запуску обработчика события

//-------------------------------------------------------------

private void button1_Click(object sender, System.EventArgs e) {

 //Указать на то, что мы не хотим, чтобы обработчики сразу же

 //обрабатывали события, поскольку мы обновляем

 //пользовательский интерфейс.

 //m_userInterfaceUpdateOccuring = true;

 radioButton1.Checked = true;

 textBox1.Text = "Hello World";

 //Обновление пользовательского интерфейса завершено

 m_userInterfaceUpdateOccuring = false;

}

//------------------------------------------------------------------

//Обработчик события изменения состояния элемента управления TextBox

//------------------------------------------------------------------

private void textBox1_TextChanged(object sender, System.EventArgs e) {

 //Если обновление данных в пользовательском интерфейсе осуществляется

 //приложением, то мы не хотим обрабатывать его так же, как если бы

 //это событие было запущено пользователем. Если это именно так,

 //то выйти из функции без выполнения каких-либо действий.

 if (m_userInterfaceUpdateOccuring == true) {

  return;

 }

 //Подсчитать, сколько раз выполнена обработка данного события

 m_textBox1ChangeEventCount++;

#if EVENTINSTRUMENTATION

 //Занести событие в журнал

 instrumented_logEventOccurrence("textBox1.Change:" + //Событие

  m_textBox1ChangeEventCount.ToString() + ":" +       //Количество раз

  textBox1.Text.ToString());                          //Значение

#endif

}

private void buttonShowEventLog_Click(object sender, System.EventArgs e) {

#if EVENTINSTRUMENTATION

 instrumentation_ShowEventLog();

#endif

}

Не допускайте, чтобы пользователю оставалось лишь догадываться о ходе выполнения приложения