使用C#写windows实时服务时遇到的问题。
如题,使用C#编写windows服务实现下面的功能:
数据库中存在两张表TaskTable(保存用户提交的任务处理的请求,会不断有用户提出新的任务请求,已经处理的任务删除。)和表ResultTable(结果表,保存任务处理后的结果。)该服务程序不断从表TaskTable中获取任务,调用处理函数,保存处理结果到表ResultTable。
下面是 OnStart( string [] argvs )方法的伪代码:
protected override void OnStart(string[] args)
{
Start(); // 调用自定义的 Start() 方法
}
protected override void OnStop()
{
Log.WriteLog(@"ProcessTaskService stopped!"); // 这里只是调用自定义的方法简单记录日志。
}
public static void Start()
{
try
{
while (true)
{
DataTable dt = DbBaseCmd.GetListByProc("FetchTask"); // FetchTask 是获取任务的存储过程。该语句调用自定义的函数返回包含任务的datatable。
string stuID = dt.Rows[0]["stuID"].ToString();
string type = dt.Rows[0]["type"].ToString();
string sysID = dt.Rows[0]["sysID"].ToString();
string rawRes = dt.Rows[0]["rawRes"].ToString();
Task task = CreateTaskObj(stuID, type, sysID, rawRes); // 构建一个任务对象。
Thread th = new Thread(new ThreadStart(task.process)); // 多态 的调用相应的处理方法。
th.Start();
}
}
}
catch (Exception ex)
{
Log.WriteLog(ex.Message + " " + ex.Source);
}
}
问题是这样的:按照上面的程序,执行安装服务的操作都是正常的。但是在“计算机” > "管理" > "服务" 中找到相应的服务后,右键启动时,开始执行启动过程的进度条,会执行很长时间,最后报错。
但是服务在依旧存在于“计算机” > "管理" > "服务" 中,而且一直在执行 处理任务请求 的工作。右键该服务,不能启动,也不能停止。
我的尝试:后来分析一下,应该是上述代码中 while( true ) 的问题。修改为有限次循环就可以正常安装、启动、停止、卸载。且循环的次数越多,执行启动过程的进度条时间就越长。
我想请教:需求是需要实时检查数据库表 TaskTable的,如果用有限次的循环不能满足需求,求大神给个解决方案!!!