C# 如何防止计时器启动后发生滴答事件

C# 如何防止计时器启动后发生滴答事件,c#,.net,C#,.net,所以我有一个定时器对象,我要调用time,time有一个tick事件,在60秒过后调用。我试图使用time.Stop()方法,但仍然调用time_Tick()。如何防止滴答法发生?计时器启动后,是否无法退出?谢谢我是个新手 如果您有其他计时器对象,您可能会看到: 在Windows窗体应用程序中的任何计时器上调用Stop都会导致立即处理来自应用程序中其他计时器组件的消息,因为所有计时器组件都在主应用程序线程上运行。如果您有两个计时器组件,一个设置为700毫秒,另一个设置为500毫秒,并且在第一个计

所以我有一个定时器对象,我要调用time,time有一个tick事件,在60秒过后调用。我试图使用time.Stop()方法,但仍然调用time_Tick()。如何防止滴答法发生?计时器启动后,是否无法退出?谢谢我是个新手

如果您有其他计时器对象,您可能会看到:

在Windows窗体应用程序中的任何计时器上调用Stop都会导致立即处理来自应用程序中其他计时器组件的消息,因为所有计时器组件都在主应用程序线程上运行。如果您有两个计时器组件,一个设置为700毫秒,另一个设置为500毫秒,并且在第一个计时器上调用Stop,那么您的应用程序可能会首先收到第二个组件的事件回调。如果这证明是有问题的,考虑使用系统中的定时器类。线程命名空间代替。
计时器滴答声可以同时到达,也可以在计时器停止后到达(出于根本原因)。滴答声可以在您停止计时器之前排队

如果要可靠地停止计时器,请设置布尔标志,并在tick事件处理程序中检查该标志。如果设置了,则忽略勾号


您需要同步对该标志的访问。

Timer.Stop()应停止计时器,从而不会引发勾号事件。您可能想显示您的代码,以便人们可以在那里查找错误。为了我公司的隐私,恐怕我不能。我会再深入一点,看看计时器是否被另一个线程或其他什么东西重新启动。谢谢你的评论。设置时间。启用false是否会有相同的效果?请看:第243行之后<代码>开始和停止仅设置.Enabled属性。然后它的setter(第157++行)开始工作。您正在使用
System.Windows.Forms.Timer
?在.NET framework中有几个名为
Timer
的类。您完全正确。经过一些调试,我发现我在这个问题中提到的计时器正在被代码中另一个更通用的计时器重新启动。谢谢。没有一个BCL定时器支持可靠地停止。