在我的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