Как использовать безопасную многопоточность для таймера (Изменить свойства таймера из другого потока) - PullRequest
0 голосов
/ 07 апреля 2009

Для доступа к заметке в моей форме я использую следующий код

    public string TextValue
    {
        set
        {
            if (this.Memo.InvokeRequired)
            {
                this.Invoke((MethodInvoker)delegate
                {
                    this.Memo.Text += value + "\n";
                });
            }
            else
            {
                this.Memo.Text += value + "\n";
            }
        }
    }

Я бы хотел использовать тот же код для включения / отключения моего таймера, но для таймера нет свойства InvokeRequired.

    public int Timer
    {
        set
        {
            if (this.timer.InvokeRequired) //?? No such thing
            {
                this.Invoke((MethodInvoker)delegate
                {
                    if (value == 1)
                        this.timer.Enabled = true;
                    else
                        this.timer.Enabled = false;
                });
            }
            else
            {
                if (value == 1)
                    this.timer.Enabled = true;
                else
                    this.timer.Enabled = false;
            }
        }
    }

Как включить таймер из другого потока?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2009

Является ли "this" объектом формы?

Предполагая, что вы создали объект Timer с помощью дизайнера форм, объект создается тем же потоком, что и тот, который создал форму, поэтому проверка свойства InvokeRequired формы фактически говорит вам об этом.

1 голос
/ 17 августа 2011

Удалить таймер из кода, как показано ниже:

public int Timer
{
    set
    {
        if (this.InvokeRequired) 
        {
            this.Invoke((MethodInvoker)delegate
            {
                if (value == 1)
                    this.timer.Enabled = true;
                else
                    this.timer.Enabled = false;
            });
        }
        else
        {
            if (value == 1)
                this.timer.Enabled = true;
            else
                this.timer.Enabled = false;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...