Использование 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;
Если нет существенной разницы, существует ли в сообществе мнение о том, какой вариант выбрать?
Ответы
Ответ 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
.