2012-04-19 101 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