我有一个运行和启动良好的 Windows 服务,但是,它运行一个后台线程(其中多个),它执行一些严肃的计算。
经过一番挖掘,我发现这是由于所有 Windows 服务都有超时。目前,它从数据库中的表中读取,将其加载到对象中,然后对所述对象进行一些分析。这一切都在 OnStart 方法中完成,然后调用其他方法。是否有一些技巧可以让服务保持运行,或者有什么方法可以在不进入注册表的情况下停止超时?谢谢
我有一个运行和启动良好的 Windows 服务,但是,它运行一个后台线程(其中多个),它执行一些严肃的计算。
经过一番挖掘,我发现这是由于所有 Windows 服务都有超时。目前,它从数据库中的表中读取,将其加载到对象中,然后对所述对象进行一些分析。这一切都在 OnStart 方法中完成,然后调用其他方法。是否有一些技巧可以让服务保持运行,或者有什么方法可以在不进入注册表的情况下停止超时?谢谢
OnStart 函数不是需要长时间执行的逻辑的地方。基本上,您需要在 OnStart 函数之外为您的逻辑创建一个类。您需要公开声明一个入口函数——即获取数据并开始处理它的函数。
例如
class ProcessingClass()
{
public void ThreadStartProc()
{
GetData();
StartProcessing();
}
}
在您的 onStart 方法中,创建一个新 Thread 并将 ThreadStart 设置为您的 ThreadStartProc 函数。例如
Thread ProcessingThread;
ProcessingClass procClass = new ProcessingClass();
protected override void OnStart(string[] args)
{
ProcessingThread = new Thread(new ThreadStart(procClass.ThreadStartProc));
ProcessingThread.Start();
}
protected override void OnStop()
{
if (ProcessingThread != null)
{
ProcessingThread.Abort();
ProcessingThread.Join();
ProcessingThread = null;
}
}
在您的处理类中,您需要处理服务停止时将抛出的 ThreadAbortException。