Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск/остановка таймера из другого потока 
:(
    Опции темы
Jamezzz
Дата 4.12.2011, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 14.9.2008

Репутация: нет
Всего: нет



Здравствуйте. На форме имеется кнопка (startButton) и таймер (mainTimer). Таймер циклично меняет надпись кнопки от 0 до 10. При нажатии на кнопку запускается второй поток (который должен запускать таймер, засыпать на 5000 мс, останавливать таймер). То есть, на время сна второго потока, на копке должны меняться цифры. Этого почему-то не происходит. Что делаю не так?

Код

using System;
using System.Windows.Forms;
using System.Threading;

namespace TimerTest
{
    public delegate void WorkerAction();

    public partial class MainForm : Form
    {
        Worker xWorker;
        Thread workerThread;
        int counter;

        public MainForm()
        {
            InitializeComponent();
            xWorker = new Worker(new WorkerAction(mainTimer.Start), new WorkerAction(mainTimer.Stop));
            workerThread = new Thread(new ThreadStart(xWorker.Job));
            counter = 0;
        }

        private void startButton_Click(object sender, EventArgs e)
        {
            workerThread.Start();
        }

        private void MainTimer_Tick(object sender, EventArgs e)
        {
            startButton.Text = counter.ToString();

            counter = (counter == 10 ? 0 : counter + 1);
        }
    }

    public class Worker
    {
        WorkerAction beforeJobAction;
        WorkerAction afterJobAction;

        public Worker(WorkerAction _BeforeJobAction, WorkerAction _AfterJobAction )
        {
            beforeJobAction = _BeforeJobAction;
            afterJobAction = _AfterJobAction;
        }

        public void Job()
        {
            beforeJobAction();
            Thread.Sleep(5000);
            afterJobAction();
        }
    }
}



Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TimerTest.zip 20,25 Kb
PM MAIL   Вверх
LostGuard
Дата 25.9.2013, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.9.2007

Репутация: нет
Всего: нет



Запускать/останавливать таймер нужно из того же потока в котором он был создан.

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  TimerTest.zip 22,38 Kb
PM MAIL   Вверх
LostGuard
Дата 25.9.2013, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.9.2007

Репутация: нет
Всего: нет



Вот для примера программка, народ не думайте что я некропостю  smile  просто забив в гугл запрос "c# управление таймером из другого потока" я в начале попал на эту страницу, так что пусть будет)

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  Timer.zip 9,24 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0719 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.