【问题标题】:Using System.Windows.Forms.Timer.Start()/Stop() versus Enabled = true/false使用 System.Windows.Forms.Timer.Start()/Stop() 与 Enabled = true/false
【发布时间】:2017-07-11 17:48:19
【问题描述】:

假设我们在 .Net 应用程序中使用 System.Windows.Forms.Timer,在计时器上使用 Start() 和 Stop() 方法与使用 Enabled 属性之间是否有任何有意义的区别?

例如,如果我们希望在进行某些处理时暂停计时器,我们可以这样做:

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

或者,我们可以这样做:

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

如果没有显着差异,社区是否就选择哪个选项达成共识?

【问题讨论】:

    标签: c# .net timer


    【解决方案1】:

    正如BFreeJames 所述,Start\StopEnabled 在功能方面没有区别。但是,应该根据上下文和您自己的编码风格指南来决定使用哪个。这取决于您希望代码的读者如何解释您编写的内容。

    例如,如果您希望他们看到您在启动和停止操作时正在做什么,您可能希望使用Start/Stop。但是,如果您想给人一种您正在启用某项功能的可访问性或功能的印象,那么使用Enabledtrue/false 是更自然的选择。

    我认为仅使用其中一种不需要达成共识,您确实必须根据代码及其维护的需要来决定。

    【讨论】:

    • 好的,所以基本上当 Timer.Enabled 的初始值为“false”时,在运行时,我调用了 Start(),Timer.Enabled 的值现在将“true”对吗?对不起,我应该写一个简单的代码。
    【解决方案2】:

    来自微软的文档:

    调用Start方法是一样的 将 Enabled 设置为 true。同样地, 调用 Stop 方法与 将启用设置为 false。

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

    所以,我想没有区别......

    【讨论】:

      【解决方案3】:

      不,它们是等价的。

      Timer.EnabledTimer.Start / Timer.Stop

      为了补充您关于共识的问题,我想说使用 Start/Stop 方法可能更好,而且我想它的可读性也更好。

      詹姆斯。

      【讨论】:

        【解决方案4】:

        就个人而言,我不喜欢将属性设置为除了更改值之外会产生太多后果,因此我倾向于坚持使用Start()/Stop(),因为我很清楚(呃)当您调用时一个方法,你要求某事发生。

        也就是说,我认为Enabled = true 的设置不会有太多的歧义 :)

        【讨论】:

        • 我不确定...直到我阅读了文档,我的心智模型是 Start()/Stop() 导致计时器开始或停止计数,而设置 Enabled 将支配计时器结束时是否触发事件(这在您可能需要暂时阻止事件但如果您稍后重新启用它们时保持相同的时间表的情况下很有用)。
        • @Jules 这可以理解,但错误:) 如果您设置Enabled = true,则下一个事件将在Interval 之后触发,如果您没有禁用它们,则不会在下一个事件触发时触发。
        • 是的;我的观点是这是一个合理的解释,所以你应该避免歧义,不要使用 Enabled 属性,而不是暗示它实际上是真的。 :)
        【解决方案5】:

        这里有一个简单的代码来测试EnabledStart()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 = falsetimer.Stop() 将不起作用。这就是我使用timer.Enabled = false/true 的原因。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-12-28
            • 1970-01-01
            • 2016-03-27
            • 2013-07-08
            • 1970-01-01
            • 1970-01-01
            • 2011-06-22
            相关资源
            最近更新 更多