windows服务的问题。请帮忙
在服务器写了一个服务:
让他一直循环做轮训然后做业务。处理。但是因为业务处理的代码需要的时间比较多。在业务还没所有处理完毕。服务就不管了。然后继续做轮训来监控循环了。请问我如何控制服务。必须让他当前的轮训执行完我这次的业务以后。才能进行下一次的轮训了。
代码如下:
private void StartMonitor()
{
int SleepTime = 3000;//3秒
while (true)
{
try
{
foreach (string FolderPath in FoldersPath)
{
string SqlconnectionString = InitalContextInfo(FolderPath);
DataBaseService.connectionString = SqlconnectionString;
try
{
//判断文件是否上传完毕。如果已经完毕就对上传文件进行数据库的处理。
DataSet e = DataBaseService.Query("select * from FileInfo where IfTransferd=0 and Mergeing=0");
if (e != null)
{
foreach (DataRow dr in e.Tables[0].Rows)
{
string Guid = dr["Id"].ToString();
string Filename = dr["FileName"].ToString();
long FileSize = long.Parse(dr["FileSize"].ToString());
int Totaloffset = int.Parse(dr["Totaloffset"].ToString());
//string Filepath = ServicePath + "\\ServiceStorage\\" + Filename;
string Filepath = FolderPath + "\\ServiceStorage\\" + Filename;
string RequestUser = dr["RuquestUser"].ToString();
if (!System.IO.File.Exists(Filepath)) continue;
System.IO.FileInfo fi = new System.IO.FileInfo(Filepath);
long Filelegtn = fi.Length;
if (Filelegtn >= FileSize) //判断上传完毕
{
int value = DataBaseService.ExecuteSql(" update FileInfo set Mergeing=1,IfTransferd=1 where id='" + Guid + "'");
DoDataBaseBO(RequestUser,Filepath);//执行业务处理
}
}
}
}
catch
{}
}
} catch
{}
Thread.Sleep(SleepTime);
}
}
/// <summary>
/// 解包上传后的文件并将数据集文件更新到数据库中 /// </summary>
/// <param name="FilePath"></param>
public void DoDataBaseBO(string RequestUeser, string FilePath)
{
string fileName = Path.GetFileNameWithoutExtension(FilePath);
DataSet ds = Yqun.Common.Encoder.DataSetCoder.DecryAndDecompreeDataSetFromFile(ToDirectory + "\\" + fileName + ".xml");
if (ds != null && ds.Tables.Count > 0)
{
if (ds.Tables.Contains("sys_auth_FunctionPermission"))
{
DataTable RolesDt = ds.Tables["sys_auth_Roles"];
string[] permissiontable = new string[] { "sys_auth_FunctionPermission", "sys_auth_RecordPermission", "sys_auth_Permissions", "sys_auth_Organization", "sys_auth_Users", "sys_auth_Roles" };
for (int k = 0; k < permissiontable.Length; k++)
{
DataTable dt = ds.Tables[permissiontable[k]];
#region sys_auth_FunctionPermission
if (permissiontable[k] == "sys_auth_FunctionPermission")
{
#region 用户角色的关系循环处理
for (int i = 0; i < RolesDt.Rows.Count; i++)
{
string permission = string.Empty;
string[] permissions = RolesDt.Rows[i]["permissions"].ToString().Split(',');
for (int j = 0; j < permissions.Length; j++)
{
if (j == permissions.Length - 1)
{
permission += "'" + permissions[i] + "'";
}
else
{
permission += "'" + permissions[i] + "',";
}
}
DataRow[] drs = dt.Select("FunctionsID in (" + permission + ")");
DataSet PhySet = DataService.GetDataSet(" select * from sys_auth_FunctionPermission");
DataRow[] drPhyset = PhySet.Tables[0].Select("FunctionsID in (" + permission + ")");
foreach (DataRow dr in drPhyset)
{
string Sql = "Delete from sys_auth_FunctionPermission where id='" + dr["ID"].ToString() + "'";
DataService.ExcuteCommand(Sql);
PhySet.Tables[0].Rows.Remove(dr);
}
foreach (DataRow dr2 in drs)
{
DataRow dr = PhySet.Tables[0].NewRow();
dr.ItemArray = dr2.ItemArray;
PhySet.Tables[0].Rows.Add(dr);
}
object oo = DataService.Update(PhySet);
if (oo.ToString() == "1")
{ PhySet.Dispose();}
}
#endregion
}
#endregion
#region sys_auth_RecordPermission
else if (permissiontable[k] == "sys_auth_RecordPermission")
{
#region 用户角色的关系循环处理
for (int i = 0; i < RolesDt.Rows.Count; i++)
{
string permission = string.Empty;
string[] permissions = RolesDt.Rows[i]["permissions"].ToString().Split(',');
for (int j = 0; j < permissions.Length; j++)
{
if (j == permissions.Length - 1)
{
permission += "'" + permissions[i] + "'";
}
else
{
permission += "'" + permissions[i] + "',";
}
}
DataRow[] drs = dt.Select("RecordsID in (" + permission + ")");
DataSet PhySet = DataService.GetDataSet(" select * from sys_auth_RecordPermission");
DataRow[] drPhyset = PhySet.Tables[0].Select("RecordsID in (" + permission + ")"); foreach (DataRow dr in drPhyset)
{
string Sql = "Delete from sys_auth_RecordPermission where id='"+dr["ID"].ToString()+"'";
DataService.ExcuteCommand(Sql);
PhySet.Tables[0].Rows.Remove(dr);
}
foreach (DataRow dr2 in drs)
{
DataRow dr = PhySet.Tables[0].NewRow();
dr.ItemArray = dr2.ItemArray;
PhySet.Tables[0].Rows.Add(dr);
}
object oo = DataService.Update(PhySet);
if (oo.ToString() == "1")
{
PhySet.Dispose();
}
}
#endregion }
#endregion
}