在我的MVC应用程序中,我有一个控制器,它创建一个Model
对象的实例。在Model
内,我有一个定时器,它每700ms
执行一个函数。当我在我的网站中运行控制器时,即使在关闭浏览器窗口后,我仍然可以看到计时器正在运行。 (定时器启动/停止串口连接,并且我有一个指示何时有通信的指示灯)。查看控制器是否仍在使用的MVC代码
通信实际上从来没有停止,直到我完全重新启动IIS。
是否有某种方式可以检查控制器是否仍在使用中,从而在控制器不再处于活动状态时停止计时器?
下面是型号代码:
public CheckPulses(int interval) {
CheckPulsesTimer(interval);
}
public void CheckPulsesTimer(int interval) {
Timer timer = new Timer();
timer.Enabled = true;
timer.AutoReset = true;
timer.Interval = interval;
timer.Elapsed += new ElapsedEventHandler(GetPulses);
}
这里是控制器代码:
public ActionResult Index() {
CheckPulses Pulses = new CheckPulses(700);
return View();
}
我想也许我应该只是添加一些东西到GetPulses
事件,该事件发生的每一次计时器间隔到期,并检查控制器是否仍在使用中。如果不是,请停止计时器。但是,我不知道如何写这张支票。任何人都可以将我指向正确的方向吗?
显示您的控制器代码。 –
您启动了一个计时器,但从未停止它。它有没有奇迹它继续运行?它不会因为您关闭浏览器窗口而奇迹般停止。 Web服务器不知道浏览器窗口是否打开。 –
坦率地说,你不应该基于控制器的生命周期来管理定时器的生命周期,因为它的生命周期是框架的实现细节。相反,您需要一些客户端JavaScript,告诉串行端口控制器它仍然活着,并在客户端停止触发事件时拆除串行端口连接。 – Yaur