Справочник по C#

    Исходники по языку программирования CSharp

    Электронные часы (через потоки): Справочник по C#

    /
    /
    /
    359 Views


          Все кто смотрел первый курс по c# (Windows Forms) немало услышали про потоки, но, все таки сам для себя захотел сделать часики. Вот решил опубликовать.
          Стоит напомнить, что при запуске программы запускается главный поток, и когда вы перетягиваете элементы на форму,- они создаются в главном потоке. Для манипуляции в другом потоке этими элементами, прибегаем к методу Invoke(), который имеет две перегрузки и напрямую связан с делегатом!



    Итак, создаем Windows Forms приложение. Перетаскиваем на форму один элемент Label.

    Листинг программы:

    namespace Clock
    {
    public partial class Form1 : Form
    {
    // делегат для манипулирования компонентом Label
    public delegate void DelegateForTime(Label label);
    // поле типа делегата
    DelegateForTime DelTime;
    // поток
    Thread t1;
    public Form1()
    {
    InitializeComponent();
    DelTime = new DelegateForTime(StartTime);// указываем метод делегату
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
    t1 = new Thread(LabelTime); // создаем поток
    t1.IsBackground = true; // задаем фоновый режим
    t1.Priority = ThreadPriority.Lowest; // указываем самый низкий приоритет
    t1.Start(); // стартуем
    }
    
    // устанавливает время
    void StartTime(Label label)
    {
    // выводим всегда две цифры
    // (00:00)
    string s = DateTime.Now.Hour.ToString("00");
    s += " : ";
    s += DateTime.Now.Minute.ToString("00");
    s += " : " + DateTime.Now.Second.ToString("00");
    label.Text = s;
    }
    
    void LabelTime()
    {
    // бесконечный цикл
    while (true)
    {
    Invoke(DelTime, label1);// запускаем метод с главного потока
    }
    }
    }
    }
    


    Важный момент, это создание делегата и указание метода в главном потоке:

    public Form1()
    {
    InitializeComponent();
    DelTime = new DelegateForTime(StartTime);// указываем метод делегату
    }
    


          При загрузке формы, создается новый поток, происходит вызов метода LabelTime() в котором с помощью метода Invoke(), связываем делегат DelTime c методом StartTime(…), и вторым параметром передаем текстовый компонент Label.

          Таким образом, мы добились того, что можем манипулировать элементами, которые были созданы в главном потоке созданы.

    Задать стиль вы можете в свойствах формы, в окне Properties

    Ссылки для скачивания примера: Rusfolder.netDepositFilesTurbobit.netLetitbit.net

    Электронные часы (через потоки): Справочник по C#

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest