C#: Класс живущей своей жизнью или Timer как альтернатива потокам

Сегодня рассмотрим простой пример создания класса, который начнет выполнять какие-то действия после создания и продолжит их выполнять далее, пока он существует. Тем самым наш класс будет являться потоком, выполняющимся параллельно основному потоку.

Создадим новый WinForm проект и добавим в него новый класс «myClass». Добавим в пространство имен нового класса строчку «using System.Windows.Forms;»

Опишем наш класс следующим образом:

class myClass
{
   private Timer timer = null;
   public void TimerOnOff()
   {
      this.timer.Enabled = !this.timer.Enabled;
   }
   public myClass()
   {
      this.timer = new Timer();
      this.timer.Interval = 1000;
      this.timer.Tick += new EventHandler(timer_Tick);
      this.timer.Enabled = true;
   }
   private void timer_Tick(object sender, EventArgs e)
   {
      MessageBox.Show("Прошла секунда");
   }
}

Функция «TimerOnOff()» позволит нам отключать наш таймер если он включен и включить его в противном случае. Функция «timer_Tick(object sender, EventArgs e)» является функцией срабатывающей при событии таймера «Tick» (в нашем случае это событие будет срабатывать каждую секунду, когда включен таймер).

Теперь вернемся в наш основной проект. Добавим в класс нашей формы описанный выше объект.

private myClass mC = new myClass();

Добавим на нашу форму кнопку и назначим ей следующий код при клике:

private void button1_Click(object sender, EventArgs e)
{
   mC.TimerOnOff();
}

Запустим нащ проект. Сразу после старта, каждую секунду начнет появляться сообщение «Прошла секунда». Для отключения работы таймера необходимо нажать на кнопку на форме, повторное нажатие позволит снова запустить показ сообщений. Как видно данный метод позволяет выполнять фоновые действия с заданным интервалом, причем мы можем спокойно передавать в наш класс таймер ссылки на объекты основной формы и спокойно работать с ними, без всяких «Invoke» и «new ThreadStart».

Запись опубликована в рубрике C# с метками , , , . Добавьте в закладки постоянную ссылку.