使用 System.Windows.Forms.Timer.Start()/Stop() 与 Enabled = true/false

问题描述 投票:0回答:7

假设我们在 .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
7个回答
35
投票

正如BFreeJames所说,

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

例如,如果您希望他们在启动操作和停止该操作时看到您正在做什么,您可能需要使用

Start/Stop
。但是,如果您想给人留下您正在启用某项功能的辅助功能或功能的印象,那么使用
Enabled
true/false
是更自然的选择。

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


15
投票

来自微软的文档:

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

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

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


6
投票

不,他们是等价的。

参见 Timer.EnabledTimer.Start / Timer.Stop

为了添加关于共识的问题,我想说使用启动/停止方法可能是更好的做法,而且我认为它的可读性也更好。

詹姆斯。


5
投票

就我个人而言,除了更改值之外,我不喜欢设置属性产生太多后果,因此我倾向于坚持使用

Start()
/
Stop()
,因为我很清楚(呃)当你调用一个方法时,你是在要求发生一些事情。

也就是说,我不认为对于设置

Enabled = true
的用途存在很多歧义 :)


2
投票

这里有一个简单的代码来测试

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();
};

1
投票

我不使用

timer.Stop()
timer.Start()
,因为它们是
timer.Enabled
的子集。如果你想在应用程序开始时(加载时)将计时器设置为 false,则必须使用
timer.Enabled = false
timer.Stop()
不起作用。这就是我使用
timer.Enabled = false/true
的原因。


0
投票

我听说了一些关于它们之间差异的原因。我是 C# 新手,所以我无法识别它们是否正确。

你可以问自己一个关键问题:

为什么微软采用两种方法来做同样的事情而没有任何区别?愚蠢?决不。所以有一些原因:

  • threading
    方面(Youtube链接

    .Start().Stop() 都使用

    main thread

    Enabled,创建一个

    separate thread
    ,从而避免使用主线程。简而言之,这会带来更好的性能和更可靠的代码。此外,它在事件发生的顺序方面提供了更好的灵活性。 然而,重要的是要意识到线程的危险,例如竞争条件和死锁

  • running
    方面

    虽然它们具有相同的功能,但在运行方面有所不同。 就运行方面而言,您的程序应该在不同的系统上运行稳定。一些旧系统或旧窗口无法仅通过使用

    Enabled = true
    来设置
    .Start()
    。所以最好先设置Enabled = true,然后使用.Start()/.Stop()。但是在新系统和 Windows 上没有区别。 (比如:为什么榨汁机除了电源插头之外还有电源按钮?)

© www.soinside.com 2019 - 2024. All rights reserved.