2012-04-19 80 views
0

我有一個應用程序,我在vb.net寫的。當應用程序啓動時,它連接到mysql數據庫聯機以獲取一些數據,一旦完成它繼續。終止一個.net程序

問題是,有時它卡在mysql的東西,我的意思是在請求什麼都沒有發生後,這導致我的程序鎖定。這可能是因爲互聯網問題或服務器。

有沒有一種方法,程序可以確定x秒已經過去,它沒有任何數據,所以自己終止它。我嘗試使用計時器來執行此操作,但隨着程序請求數據,它會卡住,我的意思是鎖定,因此計時器也鎖定,只有在任務完成後纔會恢復。

我希望當程序即將開始請求時,我可以啓動一個計時器並確定x秒已經過去,所以現在終止應用程序。

請讓我知道我該怎麼做?

感謝,

乾杯, Greatchap

+1

不能給mySql連接字符串添加超時嗎?那麼至少應該在你的線程中產生一個異常來恢復處理。 – Tejs 2012-04-19 18:40:18

+0

好吧,如果您擁有的唯一恢復選項是結束進程,則可以啓動另一個線程,並在超時時間內等待autoResetEvent。如果數據庫響應,則通知該事件,並在該線程中發出信號,直接退出。如果autoResetEvent等待超時,請調用Environment.Exit(1); – 2012-04-19 18:45:21

+0

System.Threading.Timer會做。 – 2012-04-19 18:52:59

回答

2

是的,你可以像你說的,用一個定時器和強制應用程序在一定時間後退出。但是,如果您在MySqlConnection上設置了超時時間,則會更有意義。

MySqlConnection.ConnectionTimeout是你在哪裏可以做到這一點。

如果由於某種原因你必須殺死它。您可以使用Process.GetCurrentProcess().Kill()作爲您的計時器。

+0

默認情況下,mysql連接超時設置爲15.這似乎是好的,但我不認爲它的工作方式應該。 – Greatchap 2012-04-19 19:36:53

+0

出了什麼問題?你有沒有試圖把它降低到幾秒鐘,它沒有超時?不知道還有什麼是鎖定您的應用程序,並殺死它似乎相當激烈。 – BlueVoodoo 2012-04-19 19:44:26

+0

問題是一旦通過線程,定時器不起作用。加上應用程序鎖定,而MySQL正在工作,所以計時器沒有幫助。 – Greatchap 2012-04-19 19:44:43