我正在使用C#Windows服务。我用10秒启动了Timer。
每10秒钟调用一次该方法,该方法仅在线程为null或处于挂起状态(在启动该线程并在该线程内部)时才执行,它调用oracle db proc。
但是当db在1或2小时后没有响应时。线程自动进入暂停状态。
此线程方法具有catch..finally块,该块永远不会执行。在内部,最后我检查了线程是否仍处于活动状态,如果是,则将其挂起。 但令人惊讶的是,它从不执行,但再次在不重新启动服务的情况下重新启动了线程。 有帮助吗?
private void objTimer_Elapsed(object sender, EventArgs e)
{
if ((_objThread == null) || (_objThread.ThreadState == ThreadState.Suspended))
{
_objThread = new Thread(DBCallMethod);
_objThread.Start();
}
}
private void DBCallMethod()
{
try
{
//DB Called to update the recods.
}
catch (Exception ex)
{
//log the exception using event log
}
finally
{
//log the complete state using event log
if (_objThread.IsAlive)
{
_objThread.Suspend();
}
}
}