Подтвердить что ты не робот

Использование System.Windows.Forms.Timer.Start()/Stop() по сравнению с Enabled = true/false

Предположим, что мы используем System.Windows.Forms.Timer в приложении .Net, Есть ли какая-либо значимая разница между использованием методов Start() и Stop() на таймере, по сравнению с использованием свойства Enabled?

Например, если мы хотим приостановить таймер во время обработки, мы могли бы сделать:

myTimer.Stop();
// Do something interesting here.
myTimer.Start();

или, мы могли бы сделать:

myTimer.Enabled = false;
// Do something interesting here.
myTimer.Enabled = true;

Если нет существенной разницы, существует ли в сообществе мнение о том, какой вариант выбрать?

4b9b3361

Ответ 1

Как указано BFree и Джеймс, нет разницы в Start \ Stop против Enabled в отношении функциональности. Однако решение о том, как использовать, должно основываться на контексте и ваших собственных правилах стиля кодирования. Это зависит от того, как вы хотите, чтобы читатель вашего кода интерпретировал написанное вами.

Например, если вы хотите, чтобы они увидели, что вы делаете, начиная с операции и останавливая эту операцию, вы, вероятно, захотите использовать Start/Stop. Однако, если вы хотите создать впечатление, что вы обеспечиваете доступность или функциональность функции, то использование Enabled и true/false более естественное соответствие.

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

Ответ 2

Из документации Microsoft:

Вызов метода Start тот же для параметра Enabled установлено значение true. Точно так же, вызов метода Stop такой же, как для параметра Enabled установлено значение false.

http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.enabled.aspx

Итак, я думаю, нет никакой разницы...

Ответ 3

Нет, они эквивалентны друг другу.

См. Timer.Enabled и Timer.Start/Timer.Stop

Чтобы добавить к вашему Вопросу о консенсусе, я бы сказал, что его, вероятно, лучше использовать методы Start/Stop, а также лучше для читаемости, я полагаю.

Джеймс.

Ответ 4

Лично мне не нравится, когда свойства свойств имеют слишком много последствий, кроме изменения значения, поэтому я склонен придерживаться Start()/Stop(), поскольку он очищает (er), что когда вы вызываете метод, вы просите, чтобы что-то произошло.

Тем не менее, я не думаю, что существует много двусмысленности в отношении того, что будет делать установка Enabled = true:)

Ответ 5

Вот простой код для проверки того, как Enabled, Start(), Stop() работают друг с другом.

Сделайте тестовое приложение для форм Windows, добавьте две простые кнопки и вставьте этот код внутри конструктора Form1():

int c = 0;
Timer tmr1 = new Timer()
{
    Interval = 100,
    Enabled= false
};
tmr1.Tick += delegate
{
    c++;
};

// used to continously monitor the values of "c" and tmr1.Enabled
Timer tmr2 = new Timer()
{
    Interval = 100,
    Enabled = true
};
tmr2.Tick += delegate
{
    this.Text = string.Format("c={0}, tmr1.Enabled={1}", c, tmr1.Enabled.ToString());
};

button1.Click += delegate
{
    tmr1.Start();
};
button2.Click += delegate
{
    tmr1.Stop();
};

Ответ 6

Я не использую timer.Stop() и timer.Start(), потому что они являются дочерними элементами timer.Enabled. Если вы хотите установить таймер в значение false в начале приложения (при загрузке), вы должны использовать timer.Enabled = false, timer.Stop() не будет работать. Вот почему я использую timer.Enabled = false/true.