Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2013, 16:39   #1
morfei74
 
Регистрация: 04.01.2013
Сообщений: 5
По умолчанию Использование таймера в вызове фукнции

Здравствуйте! Есть такая задача: Используя делегаты, события и таймер реализовать имитацию выпуска журналов
и газет различными издательствами и подписку на них различных личностей.
Должны присутствовать классы: Издательство, Подписчик. Каждый журнал/газета -
событие, в аргументах события - название и номер выпуска. Для задания
периодичности использовать таймер.

У меня получилось вызвать вызвать через делегат события по изданию газеты и журнала, а вот повторить тоже самое с использованием таймера не выходит, может кто подскажет? Вот код на с#:

Код:
using System;
using System.Collections.Generic;
using System.Threading;

namespace MyMagazin
{
    public class Message
    {
        public int Number { get; set; }
        public string Name { get; private set; }

        public Message(string name, int num)
        {
           Name = name;
           Number = num;
        }
    }

    public class Magazin
    {
        public int MagNumber { get; set; }
        public string MagName { get; private set; }

        readonly List<Magazin> _magazins = new List<Magazin>();
 
        public void AddMagazin(Magazin newMagazin)
        {
            _magazins.Add(newMagazin);   
        }

        public Magazin(string name, int num)
        {
            MagName = name;
            MagNumber = num;
        }
    }

    public class NewsPaper
    {
        public int NewNumber { get; set; }
        public string NewName { get; private set; }

        readonly List<NewsPaper> _newsPapers = new List<NewsPaper>();

        public void AddNewsPaper(NewsPaper newsPaper)
        {
            _newsPapers.Add(newsPaper);
        } 
        
        public NewsPaper(string name, int num)
        {
            NewName = name;
            NewNumber = num;
        }
    } 

    public class Publisher
    {
        public string PubName { get; set; }

        readonly List<Publisher> _publishers = new List<Publisher>(); 
      
        public void AddPublisher(Publisher newPublisher)
        {
            _publishers.Add(newPublisher);   
        }
        public delegate void Print(object sender, Message m);

        public static event Print NewsPaper;

        Timer _tNewsPaper;

        public virtual void PrintNewsPaper(object state, string name)
        {
            var count = 0;

            if (NewsPaper != null)
            {
                NewsPaper(this, new Message(name, count));
                count++;
            }
        }

        public event Print Magazin;

        Timer _tMagazin = new Timer(PrintMagazin, null, 4000, 4000);

        public Publisher(string name)
        {
            _tNewsPaper = new Timer(PrintNewsPaper, null, 0, 1000);
            PubName = name;
        }

        public virtual void PrintMagazin(string name)
        {
            var count = 0;

            if (Magazin != null)
            {
                Magazin(this, new Message(name, count));
                count++;
            }
        }
    }

    public class Subscriber
    {
        readonly List<Subscriber> _subscribers = new List<Subscriber>();

        public Subscriber(string name)
        {
            Name = name;
        }

        public void AddSubscriber(Subscriber newSubscriber)
        {
            _subscribers.Add(newSubscriber);
        }

        public static string Name { get ; set; }
        
        public void ReceiveMail(object sender, Message m)
        {
            Console.WriteLine("{0} получил очередной выпуск {1}, №{2}", Name, m.Name, m.Number);
        }
    }

    public static class Demo
    {
        public static void Main()
        {
            var newsPapers = new NewsPaper[] {new NewsPaper("Голос Украины", 1), new NewsPaper("Родина", 1)};

            var magazins = new Magazin[] {new Magazin("Веселые картинки", 1), new Magazin("Мурзилка", 1)};

            var publishers = new Publisher[] {new Publisher("Донбасс"), new Publisher("Новый мир")};

            var subscribers = new Subscriber[] {new Subscriber("Василий"), new Subscriber("Иван")};

            //Publisher.Magazin += sub1.ReceiveMail;
            //Publisher.NewsPaper += sub1.ReceiveMail;
            //Publisher.NewsPaper += sub2.ReceiveMail;

            //publisher.OnMagazin();
            //publisher.OnNewsPaper();

            publishers[1].PrintMagazin("Донбасс");
        }
    }
}
morfei74 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры и функции - Заданы три двумерных массива одинаковой размерности. Написать фукнции и процедуры их обработки sekirei Паскаль, Turbo Pascal, PascalABC.NET 8 21.11.2013 15:45
Вписать фукнции Azrieil Общие вопросы C/C++ 0 18.12.2010 19:31
Процедуры и фукнции. hewlett Помощь студентам 1 27.03.2010 08:46
использование таймера KancJler Помощь студентам 13 19.04.2008 01:13