Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по Высокоуровневым метода...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
5.15 Mб
Скачать

Порядок выполнения

  1. C помощью данных методических указаний научиться писать и вызывать пользовательские функции;

  2. Написать программу согласно заданию;

  3. Оформить отчет.

Задание

  1. Используя событие нажатия клавиши необходимо вывести число (приведенное в задании к лабораторной работе №2) согласно своему варианту.

  2. Под числом, используя то же событие, вывести собственную фамилию.

Контрольные вопросы

  1. Что такое делегат? Опишите сигнатуру определения делегата.

  2. Для каких целей в программе могут применяться делегаты?

  3. Напишите синтаксис добавления и удаления метода в список делегата.

  4. В каком случае можно говорить о том, что два делегата равны?

  5. Объясните процесс асинхронного вызова делегата.

  6. Что такое событие? Как в языке C# добавить к элементу обработчик события?

  7. Напишите на языке C# программу, которая, при нажатии клавиши «пробел», выводила каждую букву Вашей фамилии с интервалом в 2 секунды.

  8. При стандартном вызове события элемента используются функции с аргументами sender и e. За что отвечают каждый из этих аргументов?

  9. Для каких целей в языке C# применяется ключевое слово lock?

  10. Опишите сигнатуру использования ключевого слова lock.

Лабораторная работа №4 Работа с таймером

Цель работы: изучить работу и принцип действия таймеров в языке C#.

Оборудование: персональный компьютер, Microsoft Visual Studio 2010.

Краткая теория

Таймеры являются простыми объектами, позволяющие указывать время и интервал вызова функции. Для работы с таймерами в C# необходимо подключить пространство имен System.Timers:

using System.Windows.Forms;

Для создания таймера необходимо вызвать конструктор по умолчанию с типом Timer. Например:

Timer myTimer = new Timer();

После создания таймера необходимо его настроить и запустить. При настройке таймера необходимо:

  • для события myTimer.Tick необходимо задать функцию обработки события, истечения времени работы таймера. Данная функция будет вызываться в момент, когда заданный интервал времени будет окончен. После вызова функции – таймер снова будет начинать свой отсчет;

  • для свойства myTimer.Interval возвращает или задает время в миллисекундах до вызова события myTimer.Tick;

  • вызвать метод myTimer.Start(), запускающий таймер.

В случаи, если необходимо остановить таймер, необходимо вызвать либо метод myTimer.Stop() либо myTimer.Dispose().

В следующем коротком примере показана работа с таймером. Для начала создаются две функции, рисующих символы «0» и «1», num0 и num1. Затем внутри класса Form1 создается закрытое статическое поле с типом Timer и открытое поле с типом int, которое будет сохранять количество вызовов таймера:

static Timer myTimer = new Timer();

public static int count = 0;

Затем создается метод SomeFunc, который будет вызываться в момент наступления события myTimer.Tick. Она работает следующим образом:

  • Проверяется значение внутреннего поля count, если оно меньше 10, то вызывается соответствующая функция рисования символа;

  • Внутри этого условия проверяется ещё одно: если значение количества вызовов четное, то вызывается функция рисования символа «1», если нет – символа «0»;

  • Если значение поля count равно 10, то его значение сбрасывается в ноль и курсор сдвигается вниз и влево.

Public void SomeFunc()

{

if (count < 10)

{

if (count % 2 == 0)

num0();

else

num1();

count++;

}

else

{

count = 0;

Paper.PenMove(-80, 20);

}

}

Далее создается метод, который будет вызывать метод SomeFunc() в момент запуска таймера:

private void TimerEventProcessor(object sender, EventArgs e)

{

SomeFunc();

}

В конце, создается обработчик события загрузки компонента ePaper, внутри которого настраивается и запускается таймер:

private void Paper_Load(object sender, EventArgs e)

{

myTimer.Tick += new EventHandler(TimerEventProcessor);

myTimer.Interval = 1000;

myTimer.Start();

}

Окончательный вариант листинга работы с таймером:

public partial class Form1 : Form

{

static Timer myTimer = new Timer();

public static int count = 0;

public void SomeFunc()

{

if (count < 10)

{

if (count % 2 == 0)

num0();

else

num1();

count++;

}

else

{

count = 0;

Paper.PenMove(-80, 20);

}

}

public Form1()

{

InitializeComponent();

Paper.PaperColor = Color.White;

Paper.PenColor = Color.Brown;

Paper.PenMove(20, 20);

}

private void TimerEventProcessor(object sender, EventArgs e)

{

SomeFunc();

}

private void Paper_Load(object sender, EventArgs e)

{

myTimer.Tick += new EventHandler(TimerEventProcessor);

myTimer.Interval = 1000;

myTimer.Start();

}

}

}

Результат работы программы изображен на рисунке 13.

Рисунок 13 – Результат работы таймера