如何停止在C#类中运行的计时器

时间:2015-07-06 12:18:35

标签: c# timer

我有一个在类中运行的计时器。我有两个按钮。 按钮1是启动计时器(在班级内) 按钮2用于强制停止计时器。 单击按钮1并执行计算时,计时器运行平稳。 但是当我按下按钮2时,计时器没有强制停止并抛出异常

  

未处理的类型' System.NullReferenceException'发生了#34;。

注意:如果我使用public static System.Timers.Timer theTimer1;然后可以用按钮2停止计时器。但是我不想使用静态,如果条件为真,那么它会自动停止但停止方法不能使用按钮。 如何使用按钮停止此计时器。 感谢。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"TextCheck.m" ofType:@"m"];

2 个答案:

答案 0 :(得分:2)

Test的构造函数中初始化计时器:

class Test
{
   public Test()
   {
       theTimer1 = new System.Timers.Timer(10000);
   }

只有在调用SerialPortEvent()时,您的代码才会初始化计时器。

在您按下Start按钮之前不会调用此方法,因此当您按Stop而不先按Start时,会出现空参考例外。

此外,您的stop()函数会释放计时器。当您尝试在处理后停止计时器时,这可能是一个问题。

答案 1 :(得分:0)

你很有可能试图从不同的线程中停止你的计时器

因此,假设您在线程1中,并且您创建了对在线程2中实例化的计时器的引用。在一段时间后线程1结束并且您在线程3中,您尝试从线程3中获取该引用线程1.这就是你得到空引用异常的原因。

您应该使用静态,易失性或任务和任务取消令牌。

public volatile System.Timers.Timer theTimer1;